ChatGPT解决这个技术问题 Extra ChatGPT

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?

Look here: qt-project.org/doc/qt-5.1/qtdoc/qtmodules.html (qml and quick are basically two sides of the same thing -- the tech itself and the controls library; modern version is qml2)

T
TheBootroo

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.


This should be the "correct" answer. This actually describes the differences between QML & QT Quick, and the billions of variations / plugins. Nice work!
Good summary. Although be aware that moving away from QPainter/QGraphicsView -based QtQuick1 to OpenGL/QSG -based QtQuick2 isn't entirely without downside: e.g printer support rather depended on QPainter stackoverflow.com/q/20825233/24283
You forget to describe QtQml module.
It could be nice to update the list. What to learn and what to forget if I'm droped into Qt 5.11? - To know: QtQuick2, QtQuickControls2, QtQuickExtra, QML2, .pro - To forget: QtQuick1, QtQuickControls1, Widgets, QML1 ; What is not finished? QBS, forget it yet!
Why the use of V8 disallow the use on mobile devices ?
S
Stephen Quan

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.


You are quite wrong on the QML2 engine, look at my answer : QML2 is simply the rewrite of the QML1 engine upon the V8 engine. Now it's being ported on a new engine V4VM because V8 is NOT compliant with iOS ! So as the guy who posted the question is using Qt5.1, he will NOT run on iOS until he updates to Qt5.2+...
Thanks @TheBootroo. The intent of my answer was why you would choose QML2 over QML1. I wasn't being specific on Qt5.1.1 even though that's what the OP was using. I clarified my answer citing QML2 as a means of future proof, but, it still is true, that QML1 may be your only choice if your hardware doesn't sufficiently deliver enough OpenGL that QML2 requires.
I would remove the whole "if you aren't interested in developing for iOS and Android (i.e. exclusively on Windows platform)" part. QQ2 applications happily run on Windows, Linux, OSX, QNX.
QQ2 only runs on half the machines in our office. Some of them are brand new Windows 8 tablets. We know the issues are due to the graphics cards not implementing all of the OpenGL stack that's needed by QQ2.
The dependency on OpenGL has gotten a lot better, see here for more information.

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now