Difference between qt qml and qt quick

2019-01-30 10:54发布

问题:

Q1:I'm confused with qml ,quick1.0 and quick2.0.What's the difference between them.

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

Q2: How to export data to quick program?I only find document v 4.7 about qml.

回答1:

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.



回答2:

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.