Класс QMacNativeWidget
Класс QMacNativeWidget предоставляет виджет для macOS, позволяющий размещать виджеты Qt в иерархии Cocoa. Подробнее...
| Заголовок: | #include <QMacNativeWidget> |
| qmake: | QT += widgets |
| С момента: | Qt 4.5 |
| Наследует: | QWidget |
Открытые функции
| QMacNativeWidget(NSView *parentView = Q_NULLPTR) | |
| ~QMacNativeWidget() | |
| NSView * | nativeView() const |
Переопределённые открытые функции
| virtual QSize | sizeHint() const |
- 211 открытые функции унаследованные от QWidget
- 31 открытых функций унаследованных от QObject
- 14 открытых функций унаследованных от QPaintDevice
Переопределённые защищённые функции
| virtual bool | event(QEvent *ev) |
- 35 защищённых функций унаследованных от QWidget
- 9 защищённых функций унаследованных от QObject
- 1 защищённая функция унаследованная от 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
Подробное описание
Класс QMacNativeWidget предоставляет виджет для macOS, позволяющий размещать виджеты Qt в иерархии Cocoa.
В macOS существует разница между окном и представлением; обычно выражаемой как виджеты в Qt. Qt делает предположения о своей иерархии родитель-потомство, что усложняет размещение произвольного виджета Qt в иерархии «обычных» представлений из фреймворков Apple. QMacNativeWidget устраняет разрыв между представлениями и окнами и позволяет поместить иерархию виджетов Qt в окно или представление, не являющееся Qt.
QMacNativeWidget имитирует окно (т.е. isWindow() вернёт true), но его нельзя показать самостоятельно. Его необходимо поместить в окно при создании или позже с помощью вызова нативного кода.
QMacNativeWidget работает как для Carbon, так и для Cocoa, в зависимости от того, как был сконфигурирован Qt. Если Qt использует Carbon, QMacNativeWidget будет встроен в иерархии Carbon. Если Qt использует Cocoa, QMacNativeWidget будет встроен в иерархии Cocoa.
Вот пример размещения QPushButton в NSWindow:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSWindow *window = [[NSWindow alloc] initWithContentRect:NSMakeRect(200, app.desktop()->height() - 200, 239, 200)
styleMask:NSTitledWindowMask | NSClosableWindowMask
| NSMiniaturizableWindowMask | NSResizableWindowMask
backing:NSBackingStoreBuffered defer:NO];
QMacNativeWidget *nativeWidget = new QMacNativeWidget();
nativeWidget->move(0, 0);
nativeWidget->setPalette(QPalette(Qt::red));
nativeWidget->setAutoFillBackground(true);
QVBoxLayout *layout = new QVBoxLayout();
QPushButton *pushButton = new QPushButton("An Embedded Qt Button!", nativeWidget);
pushButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); // Don't use the layout rect calculated from QMacStyle.
layout->addWidget(pushButton);
nativeWidget->setLayout(layout);
// Adjust Cocoa layouts
NSView *nativeWidgetView = reinterpret_cast<NSView *>(nativeWidget->winId());
NSView *contentView = [window contentView];
[contentView setAutoresizesSubviews:YES];
[nativeWidgetView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[nativeWidgetView setAutoresizesSubviews:YES];
NSView *pushButtonView = reinterpret_cast<NSView *>(pushButton->winId());
[pushButtonView setAutoresizingMask:NSViewWidthSizable];
// Add the nativeWidget to the window.
[contentView addSubview:nativeWidgetView positioned:NSWindowAbove relativeTo:nil];
nativeWidget->show();
pushButton->show();
// Show the window.
[window makeKeyAndOrderFront:window];
[pool release]; Обратите внимание, что QMacNativeWidget требует знания Carbon или Cocoa. Всё, что он делает, — это помещает иерархию Qt в окно, не принадлежащее Qt. Затем программисту необходимо убедиться, что он правильно размещён в окне и корректно реагирует на события.
Документация по функциям-членам
QMacNativeWidget::QMacNativeWidget(NSView *parentView = Q_NULLPTR)
Создаёт QMacNativeWidget с parentView в качестве его «родительского представления» (т.е. родителя). parentView — указатель NSView.
QMacNativeWidget::~QMacNativeWidget()
Уничтожает QMacNativeWidget.
[virtual protected] bool QMacNativeWidget::event(QEvent *ev)
Переопределено из QObject::event().
NSView *QMacNativeWidget::nativeView() const
Возвращает нативное представление, которое поддерживает QMacNativeWidget.
[virtual] QSize QMacNativeWidget::sizeHint() const
Переопределено из QWidget::sizeHint().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qmacnativewidget.html