Spec-Zone.ru › Qt 5.15

Класс 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.15/qmaccocoaviewcontainer.html

Spec-Zone.ru

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