Spec-Zone.ru › Qt 5.6

Класс 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

Spec-Zone.ru

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