2008-11-25 3 views
19

Die QMainWindow ist das Hauptfenster in einer Qt-Anwendung. Normalerweise haben Sie nur einen, aber wäre es überhaupt möglich, mehrere QMainWindow Instanzen in Ihrer Anwendung zu haben?Mehrere QMainWindow-Instanzen?

ich eine Qt-basierte GUI-Anwendung arbeitete B in einer anderen Qt-basierten GUI-Anwendung auf der Integration A. Beide Anwendungen haben eine QMainWindow, und ich erwog als ersten Schritt, eine neue QMainWindow zu erstellen, die beide alte QMainWindows auf Registerkarten hat. Auf diese Weise konnte ich mich darauf konzentrieren, das Backend von GUI B mit dem Backend von A zu verbinden, ohne die Benutzeroberfläche selbst ändern zu müssen. Ist das ein praktikabler Ansatz, oder haben Sie andere Vorschläge?

+0

Ich bin in einer ziemlich ähnlichen Situation, wo ich 2 QMainWindows brauche. Falls Sie diesen Weg gegangen sind, haben Sie eine Antwort auf den Vorbehalt von @ caleb-huitt-cjhuitt, was passiert mit der Menüleiste eines Mac? –

Antwort

28

Sie können so viele QMainWindow Instanzen haben, wie Sie möchten. A QMainWindow ist nur eine QWidget, die eine Menüleiste, Symbolleiste, Statusleiste und Docking-Framework bietet. Aber im Grunde ist es nur ein QWidget, so dass Sie so viele haben können, wie Sie möchten.

Normalerweise haben Sie nur eine einzige QMainWindow für GUI Design Gründe, da es verwirrend sein kann, mehrere Hauptfenster zu haben. Wenn Sie jedoch Anwendungen wie QtAssistant implementieren, die eine neue Instanz von sich selbst öffnen können, hat der eine Prozess mehrere Hauptfenster.

Was Sie vorschlagen, sollte funktionieren. Das Fenster mit den Registerkarten muss kein QMainWindow sein, es sei denn, Sie möchten auch eine Symbolleiste zu diesem Fenster hinzufügen.

+2

Die einzige Einschränkung, die ich hinzufügen würde, ist, dass die Menüs ein wenig unkonventionell werden könnten, wenn Sie nach OS X portieren würden. Sie haben eine spezielle Handhabung, um die Menüs am oberen Bildschirmrand zu aktivieren, und ich weiß nicht wie das würde mit zwei Hauptfenstern in einem tatsächlichen Fenster funktionieren. –

+1

Vorausgesetzt, dass Sie mehrere QMainWindow in der Anwendung haben können, könnten Sie sein Docking-Framework in einem Mdi SubWindow verwenden? Wäre das eine gute Übung? – Anonymous

+0

@ Anonym: nette Idee! – CapelliC