web-dev-qa-db-fra.com

Différence entre qt qml et qt quick

Je suis confondu avec QML, QtQuick 1.0 et QtQuick 2.0. Quelle est la différence entre eux?

J'utilise QtCreator 2.8.1 basé sur Qt 5.1.1. Je souhaite développer un programme de bureau, quelle technologie dois-je utiliser?

63
骑天大圣

EDIT: Veuillez vous référer à @TheBootroo pour une meilleure réponse

Bien que ma réponse ait été acceptée par le PO, je souhaite réviser (ou même) supprimer ma réponse.

Ma réponse était basée sur des expériences personnelles concernant Qt 5.2 en 2013 dont certaines ne sont plus valables aujourd'hui:

  • QML est Qt Meta Language ou Qt Modeling Language est un langage de balisage d'interface utilisateur.
  • QtQuick (QtQuick 1.x et QtQuick 2.x) utilise QML comme langage déclaratif pour concevoir des applications centrées sur l'interface utilisateur.

De retour à Qt 5.2 lorsque vous avez créé une application rapide Qt, une question importante était de savoir si l'application était QtQuick 1.x ou QtQuick 2.x. Non seulement cela affectait les composants disponibles, mais cela modifiait le rendu de l'application.

En 2013:

  • Les applications QtQuick 1.x étaient souvent choisies si vous deviez cibler des systèmes d'exploitation plus anciens (par exemple Windows XP) ou du matériel plus ancien (par exemple OLPC) car les composants de l'interface utilisateur QML tels que les boutons étaient rendus par des composants natifs de votre système d'exploitation. Cependant, cela signifiait que vous visiez un ensemble de composants d'interface utilisateur au plus petit dénominateur commun et que votre expérience d'interface utilisateur pouvait varier d'une plateforme à l'autre.

  • L'application QtQuick 2.x a été choisie pour un aspect multiplateforme plus cohérent, mais, il fallait que votre plateforme implémente suffisamment OpenGLES sinon, votre application pourrait ne pas se charger. Cela a malheureusement limité votre application aux seuls ordinateurs et périphériques les plus récents qui ont implémenté OpenGLES.

Lorsque j'ai écrit ma réponse d'origine, cela m'a amené à recommander QtQuick 1.x dans certains scénarios par rapport à QtQuick 2.x.

Cependant, depuis lors, Qt 5+ vous permet désormais de cibler ANGLE sur Windows, ce qui apporte une compatibilité OpenGL haute performance aux bureaux Windows en traduisant les appels vers Direct3D, qui offre une bien meilleure prise en charge des pilotes.

13
Stephen Quan

QML est le nom du langage (tout comme C++, qui est un autre langage ...)

QtQuick est une boîte à outils pour QML, permettant de développer une interface graphique en langage QML (il existe d'autres boîtes à outils pour QML, certaines sont graphiques comme Sailfish Silica ou BlackBerry Cascade , et d'autres sont non graphique comme QBS qui remplace QMake/CMake/make ...)

QtQuick 1.x était basé sur Qt4.x et utilisait l'API QPainter/QGraphicsView pour dessiner la scène. QtQuick 2.X a été introduit avec Qt5.0, basé sur Scene Graph, une couche d'abstraction OpenGLES2, hautement optimisée.

Avec Qt5.1, Scene Graph a été amélioré pour utiliser le multithreading (QtQuick 2.1) Avec Qt5.2, Scene Graph est encore beaucoup plus optimisé pour réduire les appels CPU/GPU et l'utilisation de la mémoire

Le moteur QML était basé sur JsCore (moteur JS de Webkit) dans Qt4.x et a été rebasé sur V8 (moteur JS de Google Chrome) avec 5.0 mais cela ne permet pas de l'utiliser sur les mobiles et en particulier sur iOS, donc Qt5.2 a introduit un nouveau Moteur QML, nommé V4VM, créé par/pour les gars de Qt.

Il existe également les contrôles QtQuick, qui sont essentiellement un ensemble de widgets d'apparence native, basés sur QtQuick. Il était à l'origine destiné au bureau, mais Qt 5.4 a introduit un L&F natif pour Android, basé sur le thème holo. Un thème matériel, ainsi qu'un thème iOS, sont en développement mais ne sont pas disponibles à partir de la version actuelle de Qt (5.5). Certains contrôles étaient réservés aux entreprises, mais dans Qt5.5, ils ont été renommés Extras et ils sont désormais disponibles pour toutes les licences. Un autre développement est en cours, nommé QtQuickControls 2, qui est une réécriture complète des contrôles, pour obtenir de meilleures performances, destinées aux interfaces utilisateur intégrées légères, il devrait au stade de l'aperçu technique dans Qt 5.6.

Depuis Qt5.5, il y a un nouveau module nommé QtQuick3D, qui donne la possibilité de créer des applications/jeux 3D en utilisant le langage QML. Il n'utilise pas SceneGraph qui est trop orienté 2D/2.4D. Un nouveau moteur est nommé FrameGraph pour cette utilisation.

Si vous développez des applications modernes, vous devez utiliser Qt5.x + QML 2.x + QtQuick 2.x, pour toucher la base d'utilisateurs la plus vaste possible.

Avec Qt, en général, suivez toujours les mises à jour car elles ajoutent plus de fonctionnalités, plus de performances et plus de plateformes.

161
TheBootroo