Класс 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) |
- 214 открытых функций, унаследованных от QWidget
- 32 открытых функций, унаследованных от QObject
- 14 открытых функций, унаследованных от QPaintDevice
Дополнительные унаследованные члены
- 59 свойств, унаследованных от 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. С помощью 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 *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/qt-5.9/qmaccocoaviewcontainer.html