2010-11-09 6 views
1

J'ai une classe Qt Designer appelée MainWindow qui est une QMainWindow. Cette classe crée une zone MDI et possède des fenêtres enfants, comme le devrait MDI. L'un de ces enfants MDI, que nous appellerons wndChild, qui est également un QMainWindow, doit générer un "frère" (c'est-à-dire un enfant MDI de son parent, pas un enfant MDI lui-même). J'ai pensé que la meilleure façon de le faire serait de créer une fonction publique dans le parent (MainWindow) qui crée alors le nouvel enfant MDI.Qt/C++: Avoir un enfant MDI appelle une fonction de son parent?

Le problème est, je ne suis pas sûr comment appeler cette fonction de l'enfant. J'ai essayé quelque chose comme:

MainWindow *mdiparent=this->parentWidget(); 
mdiparent->spawnOtherChild(); 

Mais QMainWindow :: parentWidget renvoie un pointeur sur un QWidget, pas un QMainWindow, donc je bien sûr obtenir une erreur.

Comment pourrais-je procéder?

Répondre

3

Utilisez qobject_cast pour obtenir un pointeur vers mainWindow:

MainWindow *mdiparent = qobject_cast<MainWindow*>(this->parentWidget()); 
mdiparent->spawnOtherChild(); 
+0

Merci pour votre inscription. Malheureusement, il m'a été signalé que le mdiArea est le parent de cette fenêtre, et plutôt que de faire quelque chose comme MainWindow * mdiparent = qobject_cast (this-> parentWidget() -> parentWidget()); Je vais juste stocker un pointeur sur la fenêtre principale. Merci! – Joseph

1

Vous pouvez définir un signal à émettre par l'enfant MDI. Connectez-le à un emplacement dans votre MainWindow et générer l'autre fenêtre enfant à partir du gestionnaire d'emplacement.

Questions connexes