web-dev-qa-db-de.com

Handcodierte GUI im Vergleich zu Qt Designer GUI

Ich verbringe diese Ferien damit, Qt-Anwendungen zu schreiben. Ich habe vor ein paar Stunden über Qt Designer gelesen, was mich zu der Frage veranlasst hat: Was schreiben Menschen in Qt aus der realen Welt, um ihre GUIs zu entwerfen? Wie gestalten die Benutzer GUIs im Allgemeinen?

Zum einen stellte ich fest, dass das Schreiben des Codes von Hand konzeptionell einfacher war als der Einsatz von Qt Designer, obwohl Designer für komplexe GUIs durchaus Sinn machen könnten. Mit Designer können große grafische Benutzeroberflächen möglich sein, deren Verwaltung mit zunehmender Komplexität jedoch mit der Zeit sehr schwierig werden kann (dies ist nur meine Meinung). Ich habe auch den AmaroK-Quellcode heruntergeladen, um einen Blick auf das zu werfen, was die Jungs gemacht haben, und habe viele Aufrufe von addWidget () und Freunden gefunden, aber keine dieser von Designer erstellten XML-Dateien (abgesehen von: AmaroK muss meine Lieblingsanwendung sein, die jemals im Einsatz ist jede Plattform).

Was ist dann der "richtige" Weg, um eine GUI zu erstellen? Designer oder Code? Lassen Sie uns für diese Diskussion die folgenden Arten von GUIs berücksichtigen:

  1. Einfache Dialoge, die nur Eingaben machen, Ergebnisse zeigen und beenden. Angenommen, eine Anwendung nimmt eine YouTube-URL und lädt das Video auf die Festplatte des Benutzers herunter. Die Art von Anwendungen, mit denen ein Neuling wahrscheinlich beginnt.
  2. GUI für mittlere Ebenen wie beispielsweise ein Notizen-Editor mit einigen Symbolleisten-/Menüelementen. Nehmen wir zum Beispiel xPad ( http://getxpad.com/ ). Ich würde sagen, dass die meisten Anwendungen in die Kategorie "Dienstprogramme" fallen.
  3. Sehr komplexe GUIs wie AmaroK oder OpenOffice. Sie kennen sie, wenn Sie sie sehen, weil sie dazu führen, dass Ihre Augen bluten.
110
Ankur Sethi

Unsere Erfahrung mit Designer begann im dritten Quartal.

Qt3

Zu diesem Zeitpunkt war Designer vor allem nützlich, um Code zu generieren, den Sie dann in Ihre Anwendung kompilieren würden. Wir haben angefangen zu diesem Zweck zu verwenden, aber mit dem generierten Code können Sie nach der Bearbeitung nicht mehr zurückgehen und ihn neu generieren, ohne Ihre Änderungen zu verlieren. Am Ende haben wir nur den generierten Code genommen und alles von Hand gemacht.

Qt4

Qt4 hat Designer gegenüber deutlich verbessert. Es erzeugt nicht mehr nur Code, sondern Sie können dynamisch in Ihre Designer-Dateien laden (in xml) und sie dynamisch mit den laufenden Objekten in Ihrem Programm verknüpfen - kein generierter Code. Sie müssen jedoch die Elemente benennen in Designer und bleiben Sie bei den Namen, um Ihren Code nicht zu beschädigen.

Nach meiner Einschätzung ist es bei Mac OS X bei weitem nicht so nützlich wie Interface Builder, aber zu diesem Zeitpunkt konnte ich die Verwendung der Designer-Dateien direkt in einem Programm sehen.

Wir sind seit Qt3 nicht mehr zu Designer zurückgekehrt, verwenden es aber immer noch zum Prototypen und Debuggen von Layouts.

Für deine Probleme:

  1. Sie könnten wahrscheinlich die Standarddialoge verwenden, die Qt anbietet . QInputDialog oder wenn Sie die QDialog-Unterklasse verwenden, verwenden Sie QButtonDialogBox . Layout.

  2. Sie könnten wahrscheinlich etwas eingeschränkter wie xPad mit eingeschränkter Designer-Funktionalität machen.

  3. Ich würde nicht denken, dass Sie so etwas wie OpenOffice nur mit Designer schreiben könnten, aber vielleicht ist das nicht der Punkt.

Ich würde Designer als ein anderes Werkzeug verwenden, genau wie Ihr Texteditor. Wenn Sie die Einschränkungen gefunden haben, probieren Sie ein anderes Werkzeug für das neue Problem aus. Ich stimme mit Steve S völlig überein, dass ein Vorteil von Designer darin besteht, dass jemand anderes, der kein Programmierer ist, das Layout übernimmt.

41
Michael Bishop

Nach meinen Erfahrungen mit Qt Designer und anderen Toolkits/UI-Tools:

  • UI-Tools beschleunigen die Arbeit.
  • UI-Tools erleichtern das spätere Anpassen des Layouts.
  • UI-Tools erleichtern/ermöglichen es Nicht-Programmierern, am UI-Design zu arbeiten.

Komplexität kann häufig in einem UI-Tool behandelt werden, indem der Entwurf in mehrere UI-Dateien aufgeteilt wird. Fügen Sie kleine logische Gruppen von Komponenten in jede Datei ein und behandeln Sie jede Gruppe wie ein einzelnes Widget, das zum Erstellen der vollständigen Benutzeroberfläche verwendet wird. Das Konzept von Qt Designer für geförderte Widgets kann dabei helfen.

Ich habe nicht herausgefunden, dass der Umfang des Projekts einen Unterschied macht. Ihre Erfahrung kann variieren.

Die mit UI-Werkzeugen erstellten Dateien (ich denke, Sie könnten sie von Hand schreiben, wenn Sie dies wirklich wollten) können häufig zur Laufzeit dynamisch geladen werden (Qt und GTK + bieten diese Funktion). Das bedeutet, dass Sie Layoutänderungen vornehmen und testen können, ohne sie erneut zu kompilieren.

Letztendlich denke ich, dass sowohl Code als auch UI-Tools effektiv sein können. Es hängt wahrscheinlich sehr viel 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 zulassen.

41
Steve S

Die Organisation, für die ich arbeite, hat ihre GUI-Anwendung vor einigen Jahren auf Qt portiert. Ich denke, es gibt mehrere Aspekte, die es wert sind, erwähnt zu werden:

  • Die Arbeit mit Qt Designer war zumindest zu diesem Zeitpunkt keine realistische Option: Es gab zu viele Funktionen, die mit Qt Designer nicht möglich waren.
  • Konventionen und Strukturen, die beibehalten werden mussten, verhinderten die Verwendung von Qt Designer.
  • Wenn Sie einmal ohne Designer angefangen haben, ist es wahrscheinlich schwierig, dorthin zurückzukehren.
  • der wichtigste Aspekt war jedoch, dass die Programmierer eher mit vi oder emacs programmiert waren als mit einer GUI-IDE.

Meine eigene Erfahrung, die ca. Bei Verwendung von Qt3.3 war es in 4 Jahren nicht möglich, dynamisches Verhalten in Dialogen in Designer zu realisieren.

8
andreas buykx

Ich möchte nur sagen, dass ich in Qt komplexe GUIs geschrieben und gepflegt habe, 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, aus der Sie kommen: Als ich mit Qt angefangen habe, hatte ich schreckliche Erfahrungen mit Dreamweaver und Frontpage und anderen visuellen HTML-Werkzeugen gemacht, und es war mir lieber, mit HomeSite Code zu schreiben und wegen des schwierigen Layouts auf Photoshop zurückzugreifen Probleme.

Es gibt eine Gefahr mit visuellen Code-IDEs, die Sie versuchen, innerhalb der visuellen Tools zu bleiben, aber am Ende auch Code optimieren müssen - auf eine Art und Weise, die nicht gut verstanden wird.

Ich lernte beispielsweise die iPhone-Entwicklung. Ich habe es als frustrierend empfunden, "magisches" visuelles Zeug zu treffen (ziehe aus dem leeren Kreis im Connections-Inspector auf das Objekt im Interface Builder-Fenster ...), das einfacher wäre (z mich) in einfachem alten Code zu verstehen.

Viel Glück mit Qt - es ist ein großartiges Toolkit, egal wie Sie es verwenden, und Qt Creator scheint eine großartige IDE zu sein.

8
Sam Dutton

Ich füge hinzu, dass einer der Gründe für die Verwendung des grafischen Designers der Mangel an Layout-Managern in Win32 war. Es war nur eine absolute Positionierung möglich, und dies wäre von Hand gelutscht.

Seit ich 2002 für GUI-Apps von Delphi auf Java umgestiegen bin, habe ich nie mehr Designer verwendet. Ich mag Layout Manager viel mehr. Und ja, Sie erhalten Boilerplate-Code, aber das Verschieben von Objekten auf einem UI-Designer kann genauso viel Zeit in Anspruch nehmen wie das Wechseln der Boilerplate. Plus, ich würde mit einer langsamen IDE stecken; 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 Sie nicht kennen, können Sie mit einem Designer Zeit sparen und weniger lernen, da Sie nicht die APIs kennen müssen, die Sie verwenden. "Weniger lernen" ist jedoch der Schlüsselfaktor, also würde ich in beiden Fällen Handcodierte GUI sagen.

2) Menüleisten sind ziemlich ärgerlich für das Schreiben von Code. Denken Sie auch an Details wie Beschleuniger und so weiter. Es hängt jedoch davon ab, was Sie gewohnt sind. Nach einiger Zeit kann es schneller sein, diese Boilerplate einzugeben, als in Designer mit einem Mausklick alle diese Eigenschaften zu korrigieren. Dies ist jedoch der Fall, wenn Sie wirklich wie in eine Schreibmaschine schreiben können mit einer beliebigen GUI).

3) Ich würde die Antwort für Fall Nr. 2 auf diesen Fall erweitern. Beachten Sie, dass es für Win32-Plattformen möglicherweise möglich ist, dass Designer, die Win32-Ressourcen generieren, möglicherweise schneller geladen werden (keine Ahnung).

Ich möchte jedoch auf ein mögliches Problem bei der Verwendung von Qt Designer hinweisen. Praxisbeispiel: Das Laden eines komplexen Java-Dialogfelds (Dialogfeld Voreinstellungen 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 zu laden, wenn der Programmierer sie sehen wollte (ich habe das später erkannt), indem zu jedem Einstellungssatz eine eigene Methode hinzugefügt wurde, um die GUI zu erstellen.

Wenn Sie alle Registerkarten und den Tab-Schalter zusammen mit einem Designer entwerfen, können Sie das genauso einfach tun? Ich denke, es könnte ein ähnliches Beispiel geben, bei dem eine handcodierte GUI mehr Flexibilität bietet. In solch einer großen App werden Sie dies wahrscheinlich benötigen, auch wenn dies nur zu Optimierungszwecken der Fall ist.

7
Blaisorblade

Einer der Hauptvorteile der Verwendung von Designer zum Erstellen von GUIs besteht darin, dass andere Programmierer Formulare und Widgets problemlos ändern oder verwalten können, ohne in einen komplexen Code eingreifen zu müssen.

6
Nejat

Es ist merkwürdig, dass Sie sagen, dass der Schreibcode einfacher ist als das Bearbeiten von Objekten in einer grafischen Umgebung. Es ist ein Kinderspiel.
Der Designer ist dazu da, Ihnen das Leben leichter zu machen und macht Ihren Code langfristig wartungsfreundlicher. Es ist einfacher, im Designer nachzuschauen, wie die Benutzeroberfläche aussieht, dann den Code zu lesen und sich vorzustellen, wie er aussehen könnte.
Mit dem aktuellen Qt können Sie fast alles vom Designer aus erledigen und die wenigen Dinge, die Sie nicht tun können, können Sie mit wenigen Zeilen Code im Konstruktor reparieren eine Signalsteckplatzverbindung. Mit dem Designer ist es so einfach wie ein Doppelklick. Ohne den Designer müssen Sie nach der korrekten Signatur des Signals suchen, die .h-Datei bearbeiten und dann den Code in die .cpp-Datei schreiben. Mit dem Designer können Sie über diesen Details stehen und sich auf das konzentrieren, was wirklich wichtig ist - die Funktionalität Ihrer Anwendung.

5
shoosh

Zunächst möchte ich mich an den Designer wenden, um GUI-Widgets zu entwickeln. Wie in den anderen Beiträgen erwähnt, ist es schneller. Sie erhalten auch sofortiges Feedback, um zu sehen, ob es "richtig aussieht" und für den Benutzer nicht verwirrend ist. Der Designer ist ein Hauptgrund, warum ich Qt gegenüber anderen Toolkits wähle. Ich benutze hauptsächlich den Designer, um die einmaligen Dialoge zu erstellen.

Trotzdem mache ich das Hauptfenster und alle komplexen Widgets von Hand ... Ich denke, das ist die Art, wie Trolltech es beabsichtigt hat. QFormLayout ist eine Klasse, die sie bereitstellen, um auf einfache Weise einen Eingabedialog zu erstellen.

Übrigens ist der Designer in Qt 4 kein IDE wie er in Qt 3. Es ist nur ein Editor zum Bearbeiten von .ui-Dateien. Ich mag es so. Die neue Cross-Plattform IDE wird Qt Creator genannt.

4
Mark Beckwith

Es ist ein alter Beitrag, aber ich würde Ihnen raten, sich Clementine anzuschauen - einen Musikspieler, der (denke ich) von Amarok stammt. Sie verwenden Qt4, und aus dem, was ich sehen kann, befindet sich im Ordner src des Projekts ein Ordner ui . Im Ordner ui befinden sich, wie zu erwarten, alle möglichen .ui-Dateien. Wenn Sie Clementine kompilieren und starten, werden Sie feststellen, dass die GUI ziemlich komplex und ziemlich schön ist.

4
s5s

Für mich hängt es davon ab, wie viel logic im Widget/GUI gekapselt ist. Wenn es nur um einfache Formulare geht, benutze ich lieber QtDesigner.

Wenn es komplexe Prüfungen oder Interaktionen enthält, neige ich dazu, es zu programmieren.

3
Ben

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 in einem "parent-gui" zusammenzufassen.

Auf diese Weise sind Ihre Widgets in hohem Maße wiederverwendbar und können modular für Guis verwendet werden. Sie müssen lediglich angeben, welche Signale jedes Widget sendet und welche Slots es bereitstellt.

Wir erstellen zusätzlich .ui-Dateien, die während des Build-Prozesses erzeugt werden konnten. Bisher mussten diese Dateien nicht von Hand bearbeitet werden.

2
MOnsDaR

Erstellen Sie verschiedene Teile Ihrer Benutzeroberfläche
in verschiedenen .ui-Dateien mit QtDesigner,
dann bringen Sie sie im Code zusammen (und fügen Sie Komplikationen hinzu).

Es gibt Dinge, die Sie in Qt Designer nicht tun können. Sie können dies nur im Code tun.
Qt Designer ist also nur ein (großer) Teil der Werkzeugkette .

0
dave