Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between qt qml and qt quick

I'm confused with QML, QtQuick 1.0 and QtQuick 2.0. What's the difference between them?

I use QtCreator 2.8.1 based on Qt 5.1.1. I want to develop a desktop program, which technology should I use?

like image 659
骑天大圣 Avatar asked Oct 31 '13 00:10

骑天大圣


People also ask

What is the difference between Qt and Qt Quick?

Qt Widgets use CPU (software) rendering only. Qt Quick can use GPU (hardware) rendering. Because Qt Widgets is older, it has been developed longer so it is more more mature and stable. Because Qt Quick is newer, it has modern features not found in widgets, such as fluid animations and Particles.

Should I use Qt Quick?

Qt Widgets provide means for customization via style sheets, but Qt Quick is a better performing choice for user interfaces that do not aim to look native. Qt Widgets do not scale well for animations. Qt Quick offers a convenient and natural way to implement animations in a declarative manner.

Why Qt QML is used?

QML (Qt Markup Language) It offers a highly readable, declarative, JSON-like syntax with support for imperative JavaScript expressions, and it allows components to be easily reused and customized within a user interface. In a typical project, the front-end is developed in QML/JavaScript.

Which one you would prefer for GUI development Qt widget or Qt QML?

As someone who develops qt applications professionally, I will choose qml over widgets any day. Widgets are good for the very basic stuff, but I once you need to create something that is a bit more fancy, widgets will fall short very soon.


2 Answers

QML is the name of the language (just like C++, which is another language...)

QtQuick is a toolkit for QML, allowing to develop graphical interface in QML language (there are other toolkits for QML, some are graphical like Sailfish Silica or BlackBerry Cascade, and some are non-graphical like QBS which is a replacement for QMake/CMake/make...)

QtQuick 1.x was Qt4.x-based and used the QPainter/QGraphicsView API to draw the scene. QtQuick 2.X was introduced with Qt5.0, based on Scene Graph, an OpenGLES2 abstraction layer, highly optimized.

With Qt5.1, Scene Graph was enhanced to use multithreading (QtQuick 2.1) With Qt5.2, Scene Graph is yet a lot more optimized to reduce CPU/GPU calls and memory usage

QML engine was based on JsCore (JS engine of Webkit) in Qt4.x and was rebased on V8 (JS engine of Google Chrome) with 5.0 but this disallows to use it on mobiles and especially on iOS, so Qt5.2 introduced a new QML engine, named V4VM, created by/for Qt guys.

There are also the QtQuick Controls, which is basically a set of native-looking widgets, based on QtQuick. It was originally meant for desktop, but Qt 5.4 introduced a native L&F for Android, based on the holo theme. A material theme, as well as an iOS theme, are in development but not available as of current Qt release (5.5). Some controls were Enterprise only, but in Qt5.5 they got renamed as Extras, and they are now available for all licenses. Another development is undergoing, named QtQuickControls 2, which is a full rewrite of Controls, to gain better performance, aimed for light embedded UIs, it should at Tech Preview stage in Qt 5.6.

From Qt5.5, there is a new module named QtQuick3D, which gives ability to create 3D apps/games using QML language. It doesn't use SceneGraph which is too 2D/2.4D oriented. A new engine is named FrameGraph for this use.

If you develop modern apps you should use Qt5.x + QML 2.x + QtQuick 2.x, to touch the most vast userbase possible.

With Qt, in general, always follow the updates because they add more features, more perfomances and more platforms.

like image 135
TheBootroo Avatar answered Sep 19 '22 21:09

TheBootroo


EDIT: Please refer to @TheBootroo for a better answer

Although my answer was accepted by the OP, I want to revise (or even) remove my answer.

My answer was based on personal experiences with respect to Qt 5.2 in 2013 some of which is no longer valid today:

  • QML is Qt Meta Language or Qt Modelling Language is a user interface markup language.
  • QtQuick (both QtQuick 1.x and QtQuick 2.x) uses QML as a declarative language for designing user interface–centric applications.

Back at Qt 5.2 when you built a Qt Quick Application a significant question was whether the app was QtQuick 1.x or a QtQuick 2.x. Not only did this affect the components that were available, but, it altered how the application was rendered.

Back in 2013:

  • QtQuick 1.x applications was often chosen if you had to target older operating systems (e.g. Windows XP) or older hardware (e.g. OLPC) because the QML UI components such as Buttons were rendered by components native to your OS. However, this meant you were targeting a lowest common denominator set of UI components and that your UI experience may vary from platform to platform.

  • QtQuick 2.x application was chosen for a more consistent cross platform look, but, it required that your platform implemented OpenGLES sufficiently else, your application may fail to load. This, unfortunately, restricted your application to only the newest computer and devices that implemented OpenGLES.

When I wrote my original answer, this lead me to recommend QtQuick 1.x in some scenarios over QtQuick 2.x.

However, since then, Qt 5+ now allows you to target ANGLE on Windows which brings high performance OpenGL compatibility to Windows desktops by translating calls to Direct3D, which has much better driver support.

like image 21
Stephen Quan Avatar answered Sep 20 '22 21:09

Stephen Quan