Spec-Zone.ru › Qt 5.14

Класс QMacCocoaViewContainer

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

Заголовок: #include <QMacCocoaViewContainer>
qmake: QT += widgets
С момента: Qt 4.5
Наследует: QWidget

Этот класс был представлен в Qt 4.5.

  • Список всех членов, включая унаследованные члены

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

QMacCocoaViewContainer(NSView *view, QWidget *parent = nullptr)
virtual ~QMacCocoaViewContainer()
NSView * cocoaView() const
void setCocoaView(NSView *view)

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

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

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

Если вы используете QMacCocoaViewContainer как подкласс и обращаетесь к API Cocoa, вероятно, проще завершить свой файл .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 *view, QWidget *parent = nullptr)

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

[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/qt-5.14/qmaccocoaviewcontainer.html

Spec-Zone.ru

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