Interface graphique codée à la main par rapport à l'interface graphique de Qt Designer [fermé]

StackOverflow https://stackoverflow.com/questions/387092

Question

Je passe ces vacances à apprendre à écrire des applications Qt.Je lisais quelque chose sur Qt Designer il y a quelques heures, ce qui m'a fait réfléchir :qu'utilisent les personnes qui écrivent des applications réelles dans Qt pour concevoir leurs interfaces graphiques ?En fait, comment les gens conçoivent-ils les interfaces graphiques en général ?

Pour ma part, j'ai trouvé qu'écrire le code à la main était conceptuellement plus simple que d'utiliser Qt Designer, bien que pour des interfaces graphiques complexes, Designer puisse avoir du sens.De grandes interfaces graphiques pourraient être possibles avec Designer, mais avec le temps, elles pourraient devenir très difficiles à gérer à mesure que la complexité augmente (ce n'est que mon avis).J'ai également téléchargé le code source d'AmaroK pour jeter un œil à ce que faisaient ces gars, et j'ai trouvé de nombreux appels à addWidget() et à mes amis, mais aucun de ces fichiers XML créés par Designer (à part :AmaroK doit être mon application préférée sur n'importe quelle plateforme).

Quelle est alors la « bonne » façon de créer une interface graphique ?Concepteur ou code ?Considérons, pour cette discussion, les types d'interfaces graphiques suivants :

  1. Des boîtes de dialogue simples qui nécessitent simplement de prendre des entrées, d'afficher des résultats et de quitter.Supposons qu'une application prenne une URL YouTube et télécharge la vidéo sur le disque dur de l'utilisateur.Le genre d’applications avec lesquelles un débutant est susceptible de débuter.
  2. Des interfaces graphiques de niveau intermédiaire comme, par exemple, un éditeur de notes autocollantes avec quelques éléments de barre d'outils/de menu.Prenons xPad par exemple (http://getxpad.com/).Je dirais que la plupart des applications entrent dans la catégorie des « utilitaires ».
  3. Interfaces graphiques très complexes, comme AmaroK ou OpenOffice.Vous les reconnaissez quand vous les voyez parce qu'ils vous font saigner des yeux.
Était-ce utile?

La solution

Notre expérience avec le concepteur a commencé en Qt3.

Qt3

A ce moment-là, Designer est surtout utile pour générer le code que vous compilez dans votre application. Nous avons commencé à utiliser à cette fin, mais avec tout le code généré, une fois que vous modifiez, vous ne pouvez plus revenir en arrière et se régénérer sans perdre vos modifications. Nous avons fini par prendre tout le code généré et de faire tout à la main désormais.

Qt4

Qt4 est considérablement améliorée sur Designer. Non plus, qu'elle produit uniquement du code, mais vous pouvez charger dynamiquement dans vos fichiers Designer (en XML) et les connecter dynamiquement aux objets en cours d'exécution dans votre programme - Numéro de code généré cependant, vous ne devez nommer les éléments dans designer et le bâton avec les noms pour ne pas casser votre code

.

Mon évaluation est qu'il est loin d'être aussi utile que Interface Builder sous Mac OS X, mais à ce moment-là, je pouvais voir en utilisant les fichiers Designer directement dans un programme.

Nous avons pas bougé depuis Designer Retour à Qt3, mais toujours l'utiliser au prototype, et mises en page de débogage.

Pour vos problèmes:

  1. Vous pourriez probablement avec l'aide des boîtes de dialogue standard que Qt offre. QInputDialog ou si vous sous-classe QDialog, assurez-vous d'utiliser QButtonDialogBox pour vous assurer que vos boutons ont la plate-forme de mise en page appropriée.

  2. Vous pourriez probablement faire quelque chose de plus limité comme xPad avec fonctionnalité Designer limitée.

  3. Je ne pense que vous pourriez écrire quelque chose comme OpenOffice uniquement avec le concepteur, mais peut-être ce n'est pas le point.

J'utilise Designer comme un autre outil, comme votre éditeur de texte. Une fois que vous trouver les limites, essayez un autre outil pour ce nouveau problème. Je suis totalement d'accord avec Steve S que l'un des avantages de Designer est que quelqu'un d'autre qui n'est pas un programmeur peut faire la mise en page.

Autres conseils

Dans mon expérience avec Qt Designer et d'autres boîtes à outils / UI-outils:

  • outils de l'interface utilisateur accélèrent le travail.
  • outils de l'interface utilisateur facilitent Tweak la mise en page plus tard.
  • outils de l'interface utilisateur facilitent / possible pour les non-programmeurs de travailler sur la conception de l'interface utilisateur.

La complexité peut souvent être traitée dans un outil d'interface utilisateur en brisant la conception dans des fichiers d'interface utilisateur multiples. Inclure des petits groupes de composants logiques dans chaque fichier et de traiter chaque groupe comme un seul widget qui est utilisé pour construire l'interface utilisateur complète. Le concept de Qt Designer de widgets promu peut aider.

Je n'ai pas trouvé que l'ampleur du projet fait une différence. Votre expérience peut varier.

Les fichiers créés avec les outils de l'interface utilisateur (je suppose que vous pouvez les écrire à la main si vous voulez vraiment) peuvent souvent être chargés dynamiquement lors de l'exécution (Qt et GTK + à la fois de fournir cette fonctionnalité). Cela signifie que vous pouvez apporter des modifications de mise en page et de les tester sans recompilation.

En fin de compte, je pense que les deux codes premières et des outils UI peuvent être efficaces. Cela dépend probablement beaucoup sur l'environnement, la boîte à outils / interface utilisateur-outil, et bien sûr la préférence personnelle. J'aime les outils de l'interface utilisateur parce qu'ils me lever et courir vite et permettent de changer facilement plus tard.

L'organisation pour laquelle je travaille a porté son application GUI Qt il y a plusieurs années. Je pense qu'il ya plusieurs aspects qui méritent d'être mentionnés:

  • Travailler avec Qt Designer, au moins à ce moment-là, n'a pas été une option réaliste: il y avait trop de fonctionnalités qui ne pouvait pas être fait avec Qt Designer;
  • Conventions et de la structure qui ont dû être conservé empêché l'utilisation de Designer Qt;
  • Une fois que vous avez commencé sans Designer, il est sans doute difficile de revenir;
  • l'aspect le plus important, cependant, est que les programmeurs ont été très utilisés à la programmation en utilisant vi ou emacs, plutôt que d'utiliser un IDE GUI.

Ma propre expérience, qui remonte environ. 4 ans, en utilisant Qt3.3, est que le comportement dynamique dans les boîtes de dialogue n'a pas été possible de réaliser dans Designer.

Il suffit de dire que je l'ai écrit et tenu à jour dans Qt complexes des interfaces graphiques sans utiliser Qt Designer - pas parce que je n'aime pas Qt Designer, mais parce que je ne me suis jamais autour de travailler de cette façon

.

Il est en partie une question de style et où vous venez: quand j'ai commencé sur Qt, je avais eu des expériences horribles de Dreamweaver et Frontpage et d'autres outils visuels HTML, et le code d'écriture beaucoup préféré HomeSite et le recours à Photoshop pour des problèmes de mise en page délicate.

Il y a un danger avec IDEs de code visuel que vous essayez de rester dans les outils visuels, mais finissent par avoir à modifier le code aussi bien -. D'une manière qui ne sont pas bien compris

développement de l'apprentissage iPhone, par exemple, je l'ai trouvé frustrant de frapper la « magie » stuff visuelle ( « drag du cercle vide dans l'inspecteur des connexions à l'objet dans la fenêtre Interface Builder ... ») qui serait plus simple (pour moi) de comprendre dans le code bon vieux.

Bonne chance avec Qt - c'est une grande boîte à outils, mais vous l'utilisez, et Qt Creator ressemble à être un grand IDE

.

Je rajouterais que l'une des raisons pour l'utilisation de concepteur graphique est le manque de gestionnaires de mise en page dans Win32, par exemple. Seul le positionnement absolu était possible, et le faire à la main aurait tout simplement aspiré.

Depuis je suis passé de Delphi à Java pour les applications de l'interface graphique (en 2002), je ne l'ai jamais utilisé les concepteurs plus. J'aime les gestionnaires de mise en page beaucoup plus. Et oui, vous obtenez le code de passe-partout, mais des objets en mouvement sur un concepteur d'interface utilisateur peut prendre autant de temps que de changer le passe-partout. De plus, je serais coincé avec un IDE lent; qui est pour Java / C # cas, OK, alors que pour Qt (en particulier Qt4), il ne s'applique pas. Pour Qt3, je me demande pourquoi on devrait modifier le code généré - n'a pas été possible d'ajouter du code dans d'autres fichiers? Pour quelle raison?

A propos des cas abordés: 1) GUI Coded main est probablement plus rapide à écrire, au moins si vous connaissez vos bibliothèques. Si vous êtes un débutant et que vous ne savez pas, vous pouvez gagner du temps et apprendre moins avec un designer, puisque vous n'avez pas besoin d'apprendre les API que vous utilisez. Mais « apprendre moins » est le facteur clé, donc dans les deux cas, je dirais que GUI main Coded.

2) Les barres de menu sont assez ennuyeux d'écrire du code pour. Pensez également à des détails comme des accélérateurs et ainsi de suite. Pourtant, cela dépend de ce que vous êtes habitué. Après un certain temps, il peut être plus rapide de taper que boilerplate que de pointer-cliquer dans Designer pour corriger toutes ces propriétés, mais juste si vous pouvez vraiment taper comme dans une machine à écrire (comme les admins pour lesquels en tapant des commandes Unix est plus rapide que en utilisant tout GUI).

3) Je tends la réponse pour le cas n ° 2 à celui-ci. Notez que, pour les plates-formes Win32, il peut être possible que l'utilisation des designers qui génèrent des ressources Win32 peut être plus rapide à charger (aucune idée à ce sujet).

Cependant, je voudrais mentionner un problème potentiel avec l'utilisation de Qt Designer il. monde réel cas: il a fallu quelques secondes (disons 10) pour charger une boîte de dialogue complexe Java (la boîte de dialogue Préférences pour l'éditeur de texte d'un programmeur) avec beaucoup d'options. Le correctif correct aurait été de charger chacun des onglets uniquement lorsque le programmeur voulait les voir (j'ai réalisé qu'après), en ajoutant une méthode distincte pour chaque préférence pour construire son définir GUI.

Si vous concevez tous les onglets et le sélecteur d'onglet avec un concepteur, vous pouvez le faire aussi facilement? Je suppose qu'il pourrait y avoir un exemple similaire une interface utilisateur graphique codé main vous donne plus de flexibilité, et dans une si grande application, vous êtes susceptible d'avoir besoin que, même si seulement à des fins d'optimisation.

L'un des principaux avantages de l'utilisation designer pour créer des interfaces graphiques est que les autres programmeurs peuvent changer ou maintenir facilement des formes et des widgets sans qu'il soit nécessaire de se plonger dans un code complexe.

Son étrange que vous dites le code d'écriture est plus simple que la manipulation d'objets dans un environnement graphique. Il est un doux euphémisme.
Le concepteur est là pour vous rendre la vie plus facile et à long terme, il rend votre code plus maintenable. Il est plus facile de regarder dans le concepteur de voir ce que la votre interface utilisateur ressemble alors à lire le code et en essayant d'imaginer ce que cela pourrait ressembler.
Avec Qt actuelle, vous pouvez presque tout faire à partir du concepteur et vous ne pouvez pas les faire très peu de choses, vous pouvez fixer avec très peu de lignes de code dans le constructeur. Prenons, par exemple, l'exemple le plus simple - l'ajout d'une connexion signal fente. En utilisant le concepteur, il est aussi simple comme un double clic. Sans le concepteur, vous devez aller rechercher la signature correcte du signal, modifiez le fichier .h puis modifiez écrire votre code dans le fichier .cpp. Le concepteur vous permet d'être au-dessus de ces détails et se concentrer sur ce qui compte vraiment -. La fonctionnalité de votre application

J'aime d'abord me tourner vers le concepteur pour développer des widgets GUI.Comme mentionné dans les autres articles, c'est plus rapide.Vous recevez également un retour immédiat pour voir si cela « semble correct » et ne prête pas à confusion pour l'utilisateur.Le concepteur est l'une des principales raisons pour lesquelles je choisis Qt plutôt que d'autres boîtes à outils.J'utilise principalement le designer pour créer des dialogues ponctuels.

Cela dit, je réalise manuellement la fenêtre principale et tous les widgets complexes.Je pense que c'est ce que voulait Trolltech. QFormLayout est une classe qu'ils fournissent pour créer facilement une boîte de dialogue de saisie par programme.

À propos, le concepteur de Qt 4 n'est pas un IDE comme celui qu'il avait dans Qt 3.C'est juste un éditeur pour éditer les fichiers .ui.Je l'aime comme ça.Le nouvel IDE multiplateforme s'appellera Qt Creator.

Il est un ancien poste, mais je vous conseille de regarder Clementine - un lecteur de musique qui (je pense) dérive de Amarok. Ils utilisent Qt4 et de ce que je peux voir qu'il ya une ui dossier dans src dossier du projet. Dans le ui dossier que l'on pourrait attendre qu'ils ont toutes sortes de fichiers .ui. Si vous compilez et commencer à Clémentine, vous verrez que l'interface graphique est assez complexe et assez agréable.

Pour moi, cela dépend à quel point est encapsulé dans le widget / GUI logique . Si elle est à peu près les formes simples, je préfère utiliser QtDesigner.

Si elle contient des contrôles complexes ou interaction, je tends à programmer.

Nous utilisons Qt Designer si quelqu'un a besoin de créer une interface utilisateur graphique.
La chose est de créer quelques petits Widgets pour certaines tâches (comme vous le feriez dans une classe de conception), puis de les réunir dans un « parent-gui ».

De cette façon, vos widgets sont très réutilisables et peuvent être utilisés pour Guis de façon modulaire. Il suffit de spécifier les signaux chaque Widget envoie et quels emplacements qu'ils fournissent.

Nous créons en outre .ui-fichiers qui pourraient être générés que lors de la construction processus. Jusqu'à présent, il n'y avait pas besoin de modifier ces fichiers manuellement.

Construire différentes parties de votre interface utilisateur
dans différents fichiers .ui en utilisant QtDesigner,
puis les réunir (et ajouter des complications) dans le code.

Il y a des choses que vous ne pouvez pas faire dans Qt Designer, vous ne pouvez le faire dans le code,
si Qt Designer est juste une (grande) partie du chaîne d'outils .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top