The QMacNativeWidget class provides a widget for macOS that provides a way to put Qt widgets into Cocoa hierarchies. 更多...
头: | #include <QMacNativeWidget> |
qmake: | QT += widgets |
Since: | Qt 4.5 |
继承: | QWidget |
该类已过时。 提供它是为使旧源代码能继续工作。强烈建议不要在新代码中使用它。
该类在 Qt 4.5 引入。
QMacNativeWidget (NSView * parentView = nullptr) | |
virtual | ~QMacNativeWidget () |
NSView * | nativeView () const |
virtual QSize | sizeHint () const override |
virtual bool | event (QEvent * ev ) override |
使用 QWidget::winId () 代替。
On macOS, there is a difference between a window and view; normally expressed as widgets in Qt. Qt makes assumptions about its parent-child hierarchy that make it complex to put an arbitrary Qt widget into a hierarchy of "normal" views from Apple frameworks. QMacNativeWidget bridges the gap between views and windows and makes it possible to put a hierarchy of Qt widgets into a non-Qt window or view.
QMacNativeWidget pretends it is a window (i.e. isWindow () will return true), but it cannot be shown on its own. It needs to be put into a window when it is created or later through a native call.
Here is an example showing how to put a QPushButton into a 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];
Note that QMacNativeWidget requires knowledge of Cocoa. All it does is get the Qt hierarchy into a window not owned by Qt. It is then up to the programmer to ensure it is placed correctly in the window and responds correctly to events.
Create a QMacNativeWidget with parentView as its "superview" (i.e., parent). The parentView is a NSView pointer.
[虚拟]
QMacNativeWidget::
~QMacNativeWidget
()
Destroy the QMacNativeWidget .
[override virtual protected]
bool
QMacNativeWidget::
event
(
QEvent
*
ev
)
重实现: QWidget::event (QEvent *event).
Returns the native view backing the QMacNativeWidget .
[override virtual]
QSize
QMacNativeWidget::
sizeHint
() const
重实现访问函数为特性: QWidget::sizeHint .