Spec-Zone.ru › Qt 5.6

Класс QMacCocoaViewContainer

Класс QMacCocoaViewContainer предоставляет виджет для macOS, который можно использовать для обертывания произвольных Cocoa-виджетов (т.е., подклассов NSView) и вставки их в иерархии Qt. Подробнее...

Заголовок: #include <QMacCocoaViewContainer>
qmake: QT += widgets
С тех пор: Qt 4.5
Наследуется от: QWidget
  • Список всех членов, включая унаследованные

Открытые функции

QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent = Q_NULLPTR)
virtual ~QMacCocoaViewContainer()
NSView * cocoaView() const
void setCocoaView(NSView *view)
  • 211 открытых функций, унаследованных от QWidget
  • 31 открытых функций, унаследованных от QObject
  • 14 открытых функций, унаследованных от QPaintDevice

Дополнительные унаследованные члены

  • 58 свойств, унаследованных от QWidget
  • 1 свойство, унаследованное от QObject
  • 19 открытых слотов, унаследованных от QWidget
  • 1 открытый слот, унаследованный от QObject
  • 3 сигналов, унаследованных от QWidget
  • 2 сигналов, унаследованных от QObject
  • 5 статических открытых членов, унаследованных от QWidget
  • 11 статических открытых членов, унаследованных от QObject
  • 35 защищенных функций, унаследованных от QWidget
  • 9 защищенных функций, унаследованных от QObject
  • 1 защищенная функция, унаследованная от QPaintDevice
  • 1 защищенный слот, унаследованный от QWidget

Подробное описание

Класс QMacCocoaViewContainer предоставляет виджет для macOS, который можно использовать для обертывания произвольных Cocoa-виджетов (т.е., подклассов NSView) и вставки их в иерархии Qt.

Хотя Qt предлагает множество классов для написания вашего приложения, фреймворк Cocoa от Apple предлагает много функциональности, которая в настоящее время отсутствует в Qt или может никогда не попасть в Qt. Используя QMacCocoaViewContainer, можно поместить произвольный класс, производный от NSView, из Cocoa в иерархию Qt. В зависимости от того, насколько вы знакомы с использованием Objective-C, вы можете использовать QMacCocoaViewContainer напрямую или подклассировать его, чтобы обернуть дополнительную функциональность базового NSView.

QMacCocoaViewContainer работает независимо от того, скомпилирован ли Qt с Carbon или Cocoa. Однако QCocoaContainerView требует macOS 10.5 или более поздней версии для использования с Carbon.

Также следует отметить, что на низком уровне в macOS есть разница между окнами (главными окнами) и виджетами (виджетами внутри окна). По этой причине убедитесь, что NSView, который вы обертываете, не является главным. Лучший способ гарантировать это — убедиться, что у него всегда есть родительский элемент, и родительский элемент не равен 0.

Если вы используете QMacCocoaViewContainer в качестве подкласса и смешиваете и сопоставляете Objective-C с C++ (т.е. Objective-C++). Вероятно, проще сделать так, чтобы ваш файл заканчивался на .mm, чем .cpp. Большинство инструментов Apple правильно идентифицируют исходный код как Objective-C++.

QMacCocoaViewContainer требует понимания работы Cocoa, особенно с точки зрения подсчета ссылок (retain/release). В функциях ниже указано, есть ли какие-либо изменения в количестве ссылок. Cocoa-виджеты часто генерируют временные объекты, которые освобождаются пулом автоматического освобождения. Если это делается вне активного цикла событий, разработчик должен предоставить пул автоматического освобождения.

Ниже приведён фрагмент кода подклассирования QMacCocoaViewContainer для обертывания NSSearchField.

SearchWidget::SearchWidget(QWidget *parent)
    : QMacCocoaViewContainer(0, parent)
{
    // Many Cocoa objects create temporary autorelease objects,
    // so create a pool to catch them.
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Create the NSSearchField, set it on the QCocoaViewContainer.
    NSSearchField *search = [[NSSearchField alloc] init];
    setCocoaView(search);

    // Use a Qt menu for the search field menu.
    QMenu *qtMenu = createMenu(this);
    NSMenu *nsMenu = qtMenu->macMenu(0);
    [[search cell] setSearchMenuTemplate:nsMenu];

    // Release our reference, since our super class takes ownership and we
    // don't need it anymore.
    [search release];

    // Clean up our pool as we no longer need it.
    [pool release];
}

Документация по функциям членов

QMacCocoaViewContainer::QMacCocoaViewContainer(NSView *cocoaViewToWrap, QWidget *parent = Q_NULLPTR)

Создаёт новый QMacCocoaViewContainer с использованием указателя NSView в cocoaViewToWrap и родительским элементом parent. QMacCocoaViewContainer сохраняет cocoaViewToWrap.

[virtual] QMacCocoaViewContainer::~QMacCocoaViewContainer()

Уничтожает QMacCocoaViewContainer и освобождает обернутый виджет.

NSView *QMacCocoaViewContainer::cocoaView() const

Возвращает NSView, который был установлен для этого контейнера.

См. также setCocoaView().

void QMacCocoaViewContainer::setCocoaView(NSView *view)

Устанавливает view как NSView для содержимого и сохраняет его. Если этот контейнер уже содержал виджет, он освободит ранее установленный виджет.

См. также cocoaView().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qmaccocoaviewcontainer.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API