2009-07-20 3 views
0

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.

Répondre

0

Pour conclure, j'ai contacté Qt qui a dit que c'est un comportement attendu et qu'il est inhabituel pour une application tierce d'avoir besoin d'une fenêtre comme celle-ci. Ils ont suggéré d'examiner les attributs du widget Qt::WA_PaintOnScreen et Qt::WA_NoSystemBackground sur le widget. Au-delà de cela, je suppose que le correctif sera de demander que le SDK tiers est édité pour prendre des poignées de fenêtre carbone/cacao.