104 votes

Qt Quick vs. Qt Widget

Je suis nouveau dans le monde de Qt et je ne comprends pas bien la différence entre un projet rapide Qt et un projet Widget Qt.

J'espère créer un programme qui dessine un treillis d'hexagones que l'utilisateur peut faire tourner et cisailler, ainsi que faire un panoramique et un zoom avant et arrière. Il s'agira éventuellement d'un contrôleur MIDI. Quel type de projet serait le plus approprié pour cela, et pourquoi ?

J'espère que cela fonctionnera sur les plateformes de bureau et mobiles.

3 votes

Passez un peu de temps sur le Qt Quick et regardez les exemples. Si c'est ce dont vous avez besoin, utilisez-le. Si ce n'est pas le cas, allez-y pour un projet normal de widget Qt, mais les plateformes mobiles seront peut-être un problème.

0 votes

Lien mis à jour pour le commentaire de Mat doc.qt.io/qt-5/qtquick-index.html

71voto

TrebledJ Points 7190

Note : Dans cette réponse, "Qt Widgets" fait référence à une application Qt Widgets, sélectionnable lors de la création d'une nouvelle application Qt.

Cela fait sept ans que la question a été posée pour la première fois... mais voici ma " objectif " deux cents pour neutraliser toute évolution depuis lors.

Une remise à niveau

Langue

Les projets Qt Quick utilisent QML et JavaScript .

Les projets Qt Widgets utilisent du code C++. (PyQt et PySide, les bindings Python pour Qt, utilisent Python).

Performance et codage

En tant que tel, Qt Widgets pourrait être considéré comme étant de bas niveau par rapport à Qt Quick. Mais cela implique qu'à long terme, un projet Qt Widgets fonctionnera plus rapidement et aura de meilleures performances. Le fait d'être de bas niveau peut cependant être une bonne chose, car Qt Widgets est plus exposé à l'API native (la fonction Module QtCore , Feuilles de style Qt etc). Cela dit, il est souvent utilisé pour le développement de postes de travail.

Qt Quick s'adresse davantage au développement mobile (bien qu'il puisse toujours être utilisé dans le développement de bureau). Il offre des fonctions prêtes à l'emploi popups , animations les onglets et les mises en page, flickables , tiroirs et les contrôles habituels, tous omniprésents dans le développement mobile.

Conception de l'interface utilisateur

Tous deux ont ui qui fonctionnent avec QtDesigner, fournissant une vue de haut niveau pour définir les mises en page et créer des interfaces. (Dans Qt Quick, les extensions sont .ui.qml . Dans Qt Widgets, ce sont .ui .) Le site .ui ne sont ni obligatoires ni nécessaires : vous avez le choix de faire la conception et la mise en page de manière programmatique en utilisant QML/JS ou C++/Python.

Apprendre

Si vous êtes complètement Si vous êtes novice en programmation, je vous suggère de jeter d'abord un coup d'œil à Qt Quick. Personnellement, je pense que Qt Quick a une plus doux La courbe d'apprentissage est plus courte et il est plus facile de travailler avec pour accomplir des myriades de projets. Il s'appelle "Qt Rapidement "pour une bonne raison. (Ne regardez pas de haut Qt Widgets cependant, ils ont quelques modules sympas qui surpassent QtQuick).

Toutefois, si vous avez déjà programmé en C++ ou en Python, je vous suggère de commencer par les widgets Qt, afin de vous familiariser avec leurs fonctionnalités. signaux et mécanisme de créneau et des modules qui pourraient vous intéresser (par exemple sql , network , gui ) ainsi que des conceptions de programmation (par exemple programmation de modèles et de vues pour l'affichage des données).

En particulier avec C++, la plupart des bibliothèques non-Qt qui gèrent les événements utilisent while -boucles, ce n'est pas le cas avec Qt. Ils utilisent signaux et créneaux horaires .

En fin de compte, même si vous utilisez principalement Qt Widgets, vous pourriez avoir envie de regarder Qt Quick car il offre un langage déclaratif de haut niveau pour travailler et vous permet de mettre les choses en place plus rapidement. (Surtout pour le développement mobile).

Qt fournit des exemples en abondance pour les deux Qt Quick y Widget Qt ainsi qu'un forum . Vous ne devriez pas vous soucier d'obtenir de l'aide à long terme. (N'oubliez pas StackOverflow !)

Qt Quick + Qt Widget

Jusqu'à présent, nous les avons traités comme des entités distinctes. Mais il est possible de intégrer QML dans C++ . Cela vous permet de tirer parti de Qt Widget, C++ et d'autres modules. Par exemple, QtQuick fournit un module de type TreeView mais pas un TreeModel qui peuvent/doivent être enregistrés dans QML à partir de C++. Il existe souvent un séparation des préoccupations où Qt recommande de séparer les programmes en interface utilisateur et en logique en QML et C++ respectivement.

C'est aussi très pratique, si par exemple, vous avez besoin d'une backend pour les requêtes SQL intenses, les algorithmes ou les requêtes http/xml asynchrones. C'est cool, non ? Une interface QML/JS et un backend C++. Fullstack Qt'er. :-)

(Ce que je n'ai pas essayé, c'est d'avoir un backend Python. Je n'ai pas encore touché à PyQt...)

44voto

AndrewS Points 3208

Note : Les widgets Qt ont été remplacés par des widgets QML ; cette réponse répond à la question telle qu'elle a été posée, qui est maintenant strictement une question historique sur les anciens widgets Qt.

Qt Quick est une interface utilisateur déclarative, de style smartphone, qui prend en charge un grand nombre de transitions d'animation cool, courantes dans les applications pour smartphones. Quick est également un bon choix pour développer rapidement un prototype. Qt Widget est le modèle traditionnel d'interface utilisateur orienté bureau.

Actuellement (avant Qt5), le support de Qt Quick pour les fonctionnalités du système de bureau est insuffisant (mais s'améliore). Il n'y a pas autant de support pour les menus, les barres d'outils, les dialogues et autres comportements standards de bureau dans Quick, alors que Widget supporte ces éléments extrêmement bien.

Voulez-vous que votre application ait un aspect natif sur les plates-formes de bureau et de tablette, ou construisez-vous une application simple autour de votre propre widget d'interface utilisateur personnalisé ? Comme Mat l'a dit, si Qt Quick supporte les fonctionnalités que vous voulez, ce sera probablement votre approche la plus rapide. Si vous voulez construire des versions de bureau complètes, Qt Widget est probablement votre meilleur choix.

41voto

Teimpz Points 915

En tant que personne qui développe des applications qt de manière professionnelle, je choisirai qml plutôt que les widgets n'importe quand.

Les widgets sont bons pour les choses très basiques, mais dès qu'il s'agit de créer quelque chose d'un peu plus sophistiqué, les widgets tombent très vite à plat.

Qml est simplement beaucoup plus flexible, vous pouvez ancrer des éléments où vous voulez au lieu d'utiliser le système de mise en page limité des widgets. Il n'y a presque pas de défauts de dépendance à la plate-forme, alors que les widgets en sont pleins. Et le système de liaison des propriétés facilite grandement la synchronisation de l'interface utilisateur avec le modèle.

8voto

myd0 Points 128

Tout d'abord, je pense que vous devriez commencer par Widget. Widget UI aide à apprendre qt facilement et si vos expériences précédentes concernent des choses frontales, vous apprendrez Quick facilement.

7voto

Chawathe Vipul Points 623

Qt Quick utilise par défaut QML, un dialecte déclaratif JSON avec ECMAscript en ligne activé. Avec les widgets Qt, les feuilles de style peuvent être faites par le concepteur, et le développeur fait du codage C++ natif.

QML est traité au moment de l'exécution. Dans ce cadre, tout peut fonctionner ensemble, les différences ne font qu'ajouter de la souplesse au processus décisionnel de l'architecte logiciel.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X