Dies mag wie eine sehr seltsame Frage erscheinen, aber ist es möglich, ein Qt Designer-Formular ( .ui
) von einem Qt-Objekt zu generieren, sagen Sie etwas, das QWidget
? erbt?
Mein Plan ist es, ein einfaches dynamisches Formular in Code zu erstellen, wenn der Benutzer wählt, was er will, zB Felder, Art des Steuerelements und dann eine .ui
Datei ausgeben, damit sie das Layout nach Bedarf anpassen können.
Der Code verwendet dann die QUiLoader
-Klasse, um die ui
-Datei neu zu laden und die geänderte oder nicht ui
-Datei anzuzeigen.
Das Qt-Introspection-Tool GammaRay kann Dialoge von der AUI (zu prüfende Anwendung) in .ui
-Dateien speichern Version, IIRC.
Da QWidget von QObject erbt, erhält es alle dynamischen Eigenschaften, die QObject bietet. QObjects (und QWidgets) ordnen sich natürlich auch selbst in Bäume ein (siehe QObject :: parent und QObject :: children). Indem Sie dem Baum der Widgets folgen und die Eigenschaften jedes einzelnen Elements abrufen, können Sie eine XML-.ui-Datei generieren, die die grundlegenden Informationen zu jedem Steuerelement enthält.
Das Ausarbeiten der Signal / Slot-Verbindungen von einem vorher festgelegten Formular könnte etwas komplizierter sein, da es außer QObject :: dumpObjectInfo offenbar keine Möglichkeit gibt, Informationen darüber zu erhalten, sondern für das Programm, das Sie beschreiben Ihre Frage ist leicht genug, um sie auf andere Weise zu verfolgen.
Lassen Sie mich nur etwas klarstellen, Qt Designer hat eine WYSIWYG-Benutzeroberfläche, die ein Qt Designer-Formular im XML-Format erstellt, das dann zur Kompilierungszeit in C ++ - Code konvertiert wird. Und du fragst, ob man das rückwärts machen kann?
Ja, ich denke, es ist möglich, da Qt Designer Forms sowieso nur XML sind. Sie können eine Anwendung erstellen, die C ++ - Code akzeptiert, insbesondere den Code, der für die vollständige Deklaration einer Klasse verwendet wird, und dann die EIGENSCHAFTEN der Klasse in ihren entsprechenden XML-Code übersetzen. Dies würde eine Menge Arbeit erfordern, in der ich zu diesem Zeitpunkt den Punkt nicht mehr sehe.
edit: Für dieses Projekt müssten Sie Qt Designer reverse engineeren. aber ja, es ist sehr möglich.
Tags und Links c++ qt user-interface