Ich verbringe diese Ferien damit, Qt-Anwendungen zu schreiben. Ich habe vor ein paar Stunden über Qt Designer gelesen, was mich wunderte: Was verwenden Leute, die reale Anwendungen in Qt schreiben, um ihre GUIs zu entwerfen? Wie gestalten Menschen GUIs im Allgemeinen?
Zum einen stellte ich fest, dass das Schreiben des Codes von Hand konzeptionell einfacher war als die Verwendung von Qt Designer, obwohl Designer für komplexe GUIs möglicherweise Sinn macht. Mit Designer sind möglicherweise große GUIs möglich, aber mit der Zeit können sie mit zunehmender Komplexität sehr schwierig zu verwalten sein (dies ist nur meine Meinung). Ich habe auch den AmaroK-Quellcode heruntergeladen, um einen Blick auf die Aktivitäten dieser Leute zu werfen, und viele Aufrufe von addWidget () und Freunden gefunden, aber keine dieser von Designer erstellten XML-Dateien (abgesehen davon: AmaroK muss meine Lieblingsanwendung sein) jede Plattform).
Was ist dann der "richtige" Weg, um eine GUI zu erstellen? Designer oder Code? Betrachten wir für diese Diskussion die folgenden Arten von GUIs:
- Einfache Dialoge, die nur Eingaben vornehmen, Ergebnisse anzeigen und beenden müssen. Nehmen wir eine Anwendung an, die eine YouTube-URL verwendet und das Video auf die Festplatte des Benutzers herunterlädt. Die Art von Anwendungen, mit denen ein Neuling wahrscheinlich beginnen wird.
- GUIs für Fortgeschrittene wie z. B. ein Haftnotizen-Editor mit einigen Symbolleisten- / Menüelementen. Nehmen wir zum Beispiel xPad ( http://getxpad.com/ ). Ich würde sagen, die meisten Anwendungen fallen in die Kategorie "Dienstprogramme".
- Sehr komplexe GUIs wie AmaroK oder OpenOffice. Sie kennen sie, wenn Sie sie sehen, weil sie Ihre Augen bluten lassen.
quelle
Nach meiner Erfahrung mit Qt Designer und anderen Toolkits / UI-Tools:
Komplexität kann häufig in einem UI-Tool behandelt werden, indem das Design in mehrere UI-Dateien aufgeteilt wird. Fügen Sie kleine logische Gruppen von Komponenten in jede Datei ein und behandeln Sie jede Gruppe als ein einzelnes Widget, mit dem die gesamte Benutzeroberfläche erstellt wird. Das Konzept von Qt Designer für beworbene Widgets kann dabei helfen.
Ich habe nicht festgestellt, dass der Umfang des Projekts einen Unterschied macht. Ihre Erfahrung kann variieren.
Die mit UI-Tools erstellten Dateien (ich denke, Sie könnten sie von Hand schreiben, wenn Sie es wirklich wollten) können zur Laufzeit häufig dynamisch geladen werden (Qt und GTK + bieten beide diese Funktion). Dies bedeutet, dass Sie Layoutänderungen vornehmen und testen können, ohne sie neu zu kompilieren.
Letztendlich denke ich, dass sowohl Rohcode- als auch UI-Tools effektiv sein können. Es hängt wahrscheinlich sehr von der Umgebung, dem Toolkit / UI-Tool und natürlich von den persönlichen Vorlieben ab. Ich mag UI-Tools, weil sie mich schnell zum Laufen bringen und später einfache Änderungen ermöglichen.
quelle
Die Organisation, für die ich arbeite, hat ihre GUI-Anwendung vor einigen Jahren auf Qt portiert. Ich denke, es gibt einige Aspekte, die erwähnenswert sind:
Meine eigene Erfahrung, die ca. zurückreicht. 4 Jahre mit Qt3.3 war, dass dynamisches Verhalten in Dialogen in Designer nicht realisierbar war.
quelle
Um nur zu sagen, ich habe komplexe GUIs in Qt geschrieben und gepflegt, ohne Qt Designer zu verwenden - nicht weil ich Qt Designer nicht mag, sondern weil ich nie dazu gekommen bin, so zu arbeiten.
Es ist zum Teil eine Frage des Stils und der Herkunft: Als ich mit Qt anfing, hatte ich schreckliche Erfahrungen mit Dreamweaver und Frontpage und anderen visuellen HTML-Tools gemacht und es bei weitem vorgezogen, Code mit HomeSite zu schreiben und für kniffliges Layout auf Photoshop zurückzugreifen Probleme.
Bei IDEs für visuellen Code besteht die Gefahr, dass Sie versuchen, sie in den visuellen Tools beizubehalten, aber am Ende auch den Code optimieren müssen - auf eine Weise, die nicht gut verstanden wird.
Als ich zum Beispiel die iPhone-Entwicklung lernte, fand ich es frustrierend, auf "magische" visuelle Dinge zu klicken ("Ziehen aus dem leeren Kreis im Verbindungsinspektor auf das Objekt im Interface Builder-Fenster ..."), die einfacher wären (z mich) in einfachem alten Code zu verstehen.
Viel Glück mit Qt - es ist ein großartiges Toolkit, wie auch immer Sie es verwenden, und Qt Creator scheint eine großartige IDE zu sein.
quelle
Ich möchte hinzufügen, dass einer der Gründe für die Verwendung von Grafikdesigner beispielsweise das Fehlen von Layout-Managern in Win32 war. Es war nur eine absolute Positionierung möglich, und dies von Hand zu tun hätte nur gesaugt.
Seit ich (2002) von Delphi zu Java für GUI-Apps gewechselt bin, habe ich nie mehr Designer verwendet. Ich mag Layout-Manager viel mehr. Und ja, Sie erhalten Boilerplate-Code, aber das Verschieben von Objekten in einem UI-Designer kann genauso lange dauern wie das Ändern des Boilerplate. Außerdem würde ich mit einer langsamen IDE stecken bleiben; Das ist für den Java / C # -Fall, OK, während es für Qt (insbesondere Qt4) nicht gilt. Für Qt3 frage ich mich, warum man den generierten Code bearbeiten sollte - war es nicht möglich, Code in andere Dateien einzufügen? Aus welchem Grund?
Zu den besprochenen Fällen: 1) Handcodierte GUI ist wahrscheinlich schneller zu schreiben, zumindest wenn Sie Ihre Bibliotheken kennen. Wenn Sie ein Neuling sind und diese nicht kennen, können Sie mit einem Designer Zeit sparen und weniger lernen, da Sie die von Ihnen verwendeten APIs nicht lernen müssen. Aber "weniger lernen" ist der Schlüsselfaktor, daher würde ich in beiden Fällen Handcodierte GUI sagen.
2) Menüleisten sind ziemlich nervig, wenn man Code schreibt. Denken Sie auch an Details wie Beschleuniger und so weiter. Trotzdem kommt es darauf an, was Sie gewohnt sind. Nach einiger Zeit kann es schneller sein, dieses Boilerplate einzugeben, als mit dem Mausklick in den Designer zu klicken, um all diese Eigenschaften zu korrigieren, aber nur, wenn Sie wirklich wie in eine Schreibmaschine tippen können (wie die Administratoren, für die die Eingabe von Unix-Befehlen schneller ist als mit einer beliebigen GUI).
3) Ich würde die Antwort für Fall 2 auf diesen erweitern. Beachten Sie, dass es für Win32-Plattformen möglicherweise möglich ist, Designer, die Win32-Ressourcen generieren , schneller zu laden (keine Ahnung davon).
Ich möchte jedoch ein potenzielles Problem bei der Verwendung von Qt Designer erwähnen. Realer Fall: Das Laden eines komplexen Java-Dialogfelds (das Dialogfeld "Einstellungen" für den Texteditor eines Programmierers) mit vielen Optionen dauerte einige Sekunden (z. B. 10). Die richtige Lösung wäre gewesen, jede der Registerkarten nur dann zu laden, wenn der Programmierer sie sehen wollte (das wurde mir später klar), indem jedem Voreinstellungssatz eine separate Methode hinzugefügt wurde, um seine GUI zu erstellen.
Wenn Sie alle Registerkarten und den Registerkartenumschalter zusammen mit einem Designer entwerfen, können Sie dies genauso einfach tun? Ich denke, es könnte ein ähnliches Beispiel geben, bei dem eine handcodierte Benutzeroberfläche Ihnen mehr Flexibilität bietet, und in einer so großen App benötigen Sie dies wahrscheinlich, auch wenn dies nur zu Optimierungszwecken erfolgt.
quelle
Einer der Hauptvorteile der Verwendung von Designer zum Erstellen von GUIs besteht darin, dass andere Programmierer Formulare und Widgets einfach ändern oder verwalten können, ohne sich mit einem komplexen Code befassen zu müssen.
quelle
Es ist seltsam, dass Sie sagen, dass das Schreiben von Code einfacher ist als das Bearbeiten von Objekten in einer grafischen Umgebung. Es ist ein Kinderspiel.
Der Designer ist da, um Ihnen das Leben zu erleichtern und Ihren Code langfristig wartbarer zu machen. Es ist einfacher, im Designer zu sehen, wie Ihre Benutzeroberfläche aussieht, als den Code zu lesen und sich vorzustellen, wie er aussehen könnte.
Mit dem aktuellen Qt können Sie fast alles innerhalb des Designers erledigen und die wenigen Dinge, die Sie nicht tun können, können Sie mit sehr wenigen Codezeilen im Konstruktor reparieren. Nehmen Sie zum Beispiel das einfachste Beispiel - Hinzufügen einer Signalsteckplatzverbindung. Mit dem Designer ist es so einfach wie ein Doppelklick. Ohne den Designer müssen Sie die korrekte Signatur des Signals suchen, die .h-Datei bearbeiten und dann Ihren Code in die .cpp-Datei schreiben. Der Designer ermöglicht es Ihnen, über diesen Details zu stehen und sich auf das zu konzentrieren, was wirklich wichtig ist - die Funktionalität Ihrer Anwendung.
quelle
Ich wende mich gerne zuerst an den Designer, um GUI-Widgets zu entwickeln. Wie in den anderen Beiträgen erwähnt, ist es schneller. Sie erhalten auch sofort ein Feedback, um festzustellen, ob es "richtig aussieht" und den Benutzer nicht verwirrt. Der Designer ist ein Hauptgrund, warum ich Qt anderen Toolkits vorgezogen habe. Ich benutze meistens den Designer, um die einmaligen Dialoge zu machen.
Trotzdem mache ich das Hauptfenster und alle komplexen Widgets von Hand. Ich denke, so hat Trolltech es beabsichtigt. QFormLayout ist eine Klasse, mit der auf einfache Weise programmgesteuert ein Eingabedialog erstellt werden kann.
Der Designer in Qt 4 ist übrigens keine IDE wie in Qt 3. Es ist nur ein Editor zum Bearbeiten von .ui-Dateien. Ich mag es so. Die neue plattformübergreifende IDE heißt Qt Creator.
quelle
Es ist ein alter Beitrag, aber ich würde Ihnen raten, sich Clementine anzusehen - einen Musikplayer, der (glaube ich) von Amarok stammt. Sie verwenden Qt4 und soweit ich sehen kann, befindet sich im src- Ordner des Projekts ein UI- Ordner . Im ui Ordner wie man erwarten könnte sie alle Arten von .ui Dateien. Wenn Sie Clementine kompilieren und starten, werden Sie feststellen, dass die GUI ziemlich komplex und sehr schön ist.
quelle
Für mich hängt es davon ab, wie viel Logik im Widget / in der GUI enthalten ist. Wenn es nur um einfache Formulare geht, bevorzuge ich QtDesigner.
Wenn es komplexe Prüfungen oder Interaktionen enthält, neige ich dazu, es zu programmieren.
quelle
Wir verwenden den Qt Designer, wenn jemand eine GUI erstellen muss.
Die Sache ist, nur kleine Widgets für bestimmte Aufgaben zu erstellen (wie Sie es in einem Klassendesign tun würden) und sie dann zu einer "Eltern-GUI" zusammenzufügen.
Auf diese Weise sind Ihre Widgets in hohem Maße wiederverwendbar und können modular für Guis verwendet werden. Sie müssen nur angeben, welche Signale jedes Widget sendet und welche Slots sie bereitstellen.
Zusätzlich erstellen wir .ui-Dateien, die während des Erstellungsprozesses generiert werden könnten. Bisher war es nicht erforderlich, diese Dateien von Hand zu bearbeiten.
quelle
Erstellen
Sie mit QtDesigner verschiedene Teile Ihrer Benutzeroberfläche in verschiedenen .ui-Dateien
und bringen Sie sie dann im Code zusammen (und fügen Sie Komplikationen hinzu).
Es gibt Dinge, die Sie in Qt Designer nicht tun können, Sie können nur in Code tun,
also ist Qt Designer nur ein (großer) Teil der Werkzeugkette .
quelle