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