Handcodierte GUI versus Qt Designer GUI [geschlossen]

115

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:

  1. 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.
  2. 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".
  3. Sehr komplexe GUIs wie AmaroK oder OpenOffice. Sie kennen sie, wenn Sie sie sehen, weil sie Ihre Augen bluten lassen.
Ankur Sethi
quelle

Antworten:

44

Unsere Erfahrung mit Designer begann in Qt3.

Qt3

Zu diesem Zeitpunkt war Designer hauptsächlich nützlich, um Code zu generieren, den Sie dann in Ihre Anwendung kompilieren würden. Wir haben zu diesem Zweck damit begonnen, aber mit dem gesamten generierten Code können Sie nach dem Bearbeiten nicht mehr zurückkehren und ihn neu generieren, ohne Ihre Änderungen zu verlieren. Am Ende haben wir nur den generierten Code genommen und von nun an alles von Hand gemacht.

Qt4

Qt4 hat Designer erheblich verbessert. Es wird nicht mehr nur Code generiert, sondern Sie können Ihre Designer-Dateien (in XML) dynamisch laden und dynamisch mit den laufenden Objekten in Ihrem Programm verbinden. Es wird kein Code generiert. Sie müssen jedoch die Elemente in Designer benennen und bleiben mit den Namen, um Ihren Code nicht zu brechen.

Meiner Einschätzung nach ist es bei weitem nicht so nützlich wie Interface Builder unter Mac OS X, aber zu diesem Zeitpunkt konnte ich sehen, dass die Designer-Dateien direkt in einem Programm verwendet wurden.

Wir sind seit Qt3 nicht mehr zu Designer zurückgekehrt, verwenden es jedoch weiterhin zum Erstellen von Prototypen und zum Debuggen von Layouts.

Für Ihre Probleme:

  1. Sie könnten wahrscheinlich mit den von Qt angebotenen Standarddialogen davonkommen. QInputDialog oder wenn Sie Unterklasse QDialog, stellen Sie sicher , verwenden QButtonDialogBox um sicherzustellen , dass Ihre Tasten , um die richtige Plattform-Layout.

  2. Sie könnten wahrscheinlich etwas eingeschränkteres wie xPad mit eingeschränkter Designer-Funktionalität ausführen.

  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 weiteres Werkzeug verwenden, genau wie Ihren Texteditor. Wenn Sie die Einschränkungen gefunden haben, probieren Sie ein anderes Tool für dieses neue Problem aus. Ich stimme Steve S voll und ganz zu, dass ein Vorteil von Designer darin besteht, dass jemand anderes, der kein Programmierer ist, das Layout erstellen kann.

Michael Bishop
quelle
23
Es sollte niemals notwendig sein, den von uic (dem .ui-Datei-Compiler) generierten Code zu ändern. Wenn mehr Funktionen benötigt werden, erstellen Sie eine neue Klasse, die entweder von der generierten Klasse erbt oder sie als Mitglied einschließt und den erforderlichen Code hinzufügt.
Parker Coates
1
Es ist erwähnenswert, dass Qt Designer in Qt3 und frühem Qt4 (ca. 2008) eine Reihe von Funktionen fehlte, die für einige möglicherweise als Showstopper galten, z. B. mangelnde Unterstützung für ButtonGroups, benutzerdefinierte Slots, Benennung von QLayouts usw. Aber für die letzten 5- Etwa 6 Jahre später wurden alle diese Probleme behoben. Ich bevorzuge die Verwendung von UI-Dateien, wenn ich kann. Es ist viel einfacher, Layouts neu zu organisieren, und es wird viel weniger Code verwaltet.
Brendan Abel
42

Nach meiner Erfahrung mit Qt Designer und anderen Toolkits / UI-Tools:

  • UI-Tools beschleunigen die Arbeit.
  • UI-Tools erleichtern das spätere Optimieren 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 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.

Steve S.
quelle
8

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:

  • Zumindest zu diesem Zeitpunkt war die Arbeit mit Qt Designer 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.
  • Sobald Sie ohne Designer begonnen haben, ist es wahrscheinlich schwierig, darauf zurückzukommen.
  • Der wichtigste Aspekt war jedoch, dass die Programmierer sehr daran gewöhnt waren, mit vi oder emacs zu programmieren, anstatt eine GUI-IDE zu verwenden.

Meine eigene Erfahrung, die ca. zurückreicht. 4 Jahre mit Qt3.3 war, dass dynamisches Verhalten in Dialogen in Designer nicht realisierbar war.

andreas buykx
quelle
8

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.

Sam Dutton
quelle
7

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.

Blaisorblade
quelle
5
Layout-Manager schließen sich bei GUI-Designern nicht gegenseitig aus. Tatsächlich ist jeder GUI-Designer, der kein Layout-Manager-Konzept verwendet, für die Arbeit an 99% der modernen GUI-Anwendungen schlechter als nutzlos.
Steve S
7

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.

Nejat
quelle
5

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.

shoosh
quelle
3
Ja, es war ein Star für mich, aber seit ich Qt vor ungefähr einigen Jahren über 1 Jahr lang verwendet habe, wurde mir klar, dass ich schnellere UI-Arbeiten von Hand schreiben kann als durch grafisches Entwerfen. Eine Sache, die in handgeschriebenen codierten UI fehlt, ist, dass es nicht leicht zu sehen ist, wie es aussieht, bis es auf dem Bildschirm ausgeführt wird (und es ist manchmal ein wichtiger Aspekt von kooperativen Arbeiten).
Joonhwan
1
Ebenso wie ich kann ich Designer nicht tolerieren. Das Schreiben von Hand ist für mich viel leistungsfähiger und schneller. Das liegt daran, dass ich ursprünglich auf einem sehr langsamen Mac war, der kaum mit Drag & Drop umgehen konnte, und nach einigen Jahren war dies der einzige Weg Ich kann Entwürfe machen :) Über kann nicht gesehen werden, gut nach einem Jahr musste ich es nicht ausführen, alles wurde in meiner Vorstellungsschicht des Gehirns abgebildet.
ColdSteel
4

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.

Mark Beckwith
quelle
4

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.

s5s
quelle
3

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.

Ben
quelle
Ich habe mehrere Windows-Dialoge in einer MFC-App, die alle sehr ähnlich sind. Kürzlich habe ich versucht, alle Steuerelemente in einem einzigen Dialogfeld zu platzieren und bestimmte Steuerelemente basierend auf dem aktuellen Modus der App auszublenden und neu zu positionieren. Wollen Sie damit sagen, dass Sie in Qt die Steuerelemente einfach programmgesteuert erstellen können? Ich habe mich gefragt, ob das in meinem Fall einfacher wäre. Würde gerne deine Gedanken hören.
Mitchell
Mitch, ja, in Qt können Sie Steuerelemente programmgesteuert erstellen, und das ist SEHR einfach. Auch Qt verwendet ein dynamisches Layout. Dies bedeutet, dass Ihr Dialogfeld immer noch gut aussieht und verwendet werden kann, unabhängig davon, ob Sie ein Kontrollkästchen oder zwanzig hinzufügen.
George Y.
2

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.

MOnsDaR
quelle
0

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 .

Dave
quelle
Oh genau wie @MOnsDaR sagt
Dave