Comment puis-je obtenir un WindowRef unique à partir d'une application Qt incluant des fenêtres ancrées sur le Mac?Comment obtenir un WindowRef unique dans une application Qt ancrable sur Mac
Mon code se résume à:
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);
//...
}
(Toutes mes excuses si ce qui précède n'est pas syntaxiquement correct, il est juste plus facile d'illustrer que de décrire.)
J'ai ajouté le code temporaire suivant à la fin du constructeur ci-dessus:
HIViewRef view1 = (HIViewRef) mDrawArea->winId();
HIViewRef view2 = (HIViewRef) mDock->winId();
WindowRef win1 = HIViewGetWindow(view1);
WindowRef win2 = HIViewGetWindow(view2);
Mon problème est que view1
et view2
sont différents, mais win1
et win2
sont les mêmes!
J'ai essayé l'équivalent suivant sous Windows:
HWND win1 = (HWND)(mCentralDrawArea->winId());
HWND win2 = (HWND)(mDock1->winId());
Cette fois win1
et win2
sont différents.
J'ai besoin de la poignée de la fenêtre pour passer à un SDK tiers afin qu'il puisse dessiner dans la zone centrale uniquement.
BTW, Je comprends que la méthode winId() est livré avec beaucoup d'avertissements de portabilité, mais un refactor substantiel est hors de question pour moi. La même chose vaut pour l'utilisation de carbone au lieu de cacao.
Merci.