Как получить уникальный WindowRef из приложения Qt, которое включает в себя закрепленные окна на Mac?
Мой код сводится к:
int main(int argc, char* argv[])
{
QApplication* qtApp = new QApplication(argc, argv);
MyQMainWindow mainwin;
mainwin.show();
}
class MyQMainWindow : public QMainWindow
{
//...
QDockWidget* mDock;
MyQWidget* mDrawArea;
QStackedWidget* mCentralStack;
};
MyQMainWindow::MyQMainWindow()
{
mDock = new QDockWidget(tr("Docked Widget"), this);
mDock->setMaximumWidth(180);
//...
addDockWidget(Qt::RightDockWidgetArea, mDock);
mDrawArea = new MyQWidget(this);
mCentralStack = new QStackedWidget();
mCentralStack->addWidget(mDrawArea);
// Other widgets added to stack in production code.
setCentralWidget(mCentralStack);
//...
}
(Извините, если вышеприведенное не является синтаксически правильным, просто проиллюстрировать это проще, чем описать.)
Я добавил следующий временный код в конец вышеуказанного конструктора:
HIViewRef view1 = (HIViewRef) mDrawArea->winId();
HIViewRef view2 = (HIViewRef) mDock->winId();
WindowRef win1 = HIViewGetWindow(view1);
WindowRef win2 = HIViewGetWindow(view2);
Моя проблема в том, что view1
и view2
различны, но win1
и win2
одинаковы!
Я попробовал следующий эквивалент в Windows:
HWND win1 = (HWND)(mCentralDrawArea->winId());
HWND win2 = (HWND)(mDock1->winId());
На этот раз win1
и win2
различны.
Мне нужно, чтобы дескриптор окна передавался стороннему SDK, чтобы он мог рисовать только в центральной области.
Кстати, я ценю, что метод winId () поставляется с большим количеством предупреждений о переносимости, но о существенном рефакторинге для меня не может быть и речи. То же самое касается использования углерода вместо какао.
Спасибо.