[QT] Eigenen Dialog im Designer verwenden



  • Mahlzeit ...

    ich brauche in meinem Programm eine eigene Dialog Klasse mit ein paar zusätzlichen Funktionen. Dazu habe ich ein Projekt vom Typ "Benutzerdefiniertes Widget für Qt Designer" gewählt und dann von QDialog abgeleitet. Durch einen Foren-Thread , auf den ich zufällig gestoßen bin, glaube ich allerdings, dass dieser Projekttyp eigentlich dazu gedacht ist benutzerdefinierte Controls zu erstellen (die dann in der Widgetbox auftauchen).

    Jedenfalls: Wie kann ich einen eigenen Dialog/Widget (im Sinne von Fenster, nicht Control) im Qt-Designer/Qt-Creator veröffentlichen und dann eben mit weiteren Controls bestücken bzw. andere Funktionalitäten implementieren?
    Ist es außerdem möglich, diesen Dialog schon mit bestimmte Controls zu versehen, auf die ich dann im Designer Zugriff haben?



  • Ein Dialog ist etwas anderes als ein Widget (auch wenn QDialog von QWidget erbt). Ein Dialog wird üblicherweise als eigenes Fenster (mit einem anderen Fenster als parent) gestartet. Das starten erledigt der Programmierer im Code. Und der Designer ist eben keine IDE, sondern ein reines UI-zusammenclick-tool, in dem Fenster (oder eben auch einzelne Widgets oder Dialoge) gestaltet werden können. Schau mal in der Widgetbox, ob du einen einzigen Dialog finden kannst.

    Und wie man Designer-Erweiterung programmiert, behandelt die Doku sehr ausführlich. Qt Assistant öffnen, dort nach "Creating Custom Widgets for Qt Designer" suchen. Und bitte auch alles lesen, am Ende gibts auch noch Links zu Beispielen.



  • Ein Dialog ist etwas anderes als ein Widget (auch wenn QDialog von QWidget erbt). Ein Dialog wird üblicherweise als eigenes Fenster (mit einem anderen Fenster als parent) gestartet.

    Genau das ist es, was ich erreichen möchten. Ich möchte ein Fenster (Dialog) als Basisklasse entwerfen, dem ich u.A. in einer überladenen show Methode ein Zustandsobjekt mitgeben kann. Außerdem möchte ich in dem Basisdialog schon ein paar Steuerelemente hinzufügen, die eben in allen davon abgeleiteten Dialog enthalten sein sollen und deren grundlegende Funktionen implemntieren. Die abgeleiteten Dialog können dann noch weitere Steuerelemente enthalten.

    Ideal wäre es, wenn ich die Steuerelemente im Basisdialog per Layout anordnen könnte und im Layout dann einfach Platz lassen, wo die abgeleiteten Dialog ihre Steuerelemete platzieren können. Also in etwa so, wie es sich bei MainWidget und seinem CentralWidget verhält.

    Ich hoffe, mein Vorhaben ist verständlicher geworden ..



  • Es ist klar was du meinst, mit etwas Nachdenken kommst du aber selber auf die Lösung.

    Den Basisdialog kannst du problemlos im Designer erstellen. Wie du das entstehende .ui verwendest, weißt du ja hoffentlich. Eigene Klasse erstellen von QDialog abgeleitet, und per private inheritance oder Komposition das ui einbinden.

    Das Anbringen neuer Widgets würde ich hinter einer API verstecken, damit du intern Änderungen vornehmen kannst und trotzdem kompatibel bleibst - so wie eben QMainWindow::setCentralWidget() auch - es wäre ein Fiasko, wenn du selber auf das interne Layout zugreifen müsstest...

    Wenn die Sache komplexer wird, kannst du auch daran denken, die Einbindung über eine weitere Klasse zu bewerkstelligen - siehe QWizard (Dialog) und QWizardPage (die einzelnen Wizard-Seiten).


Anmelden zum Antworten