qt qml和qt quick之间的区别


72

我对QML,QtQuick 1.0和QtQuick 2.0感到困惑。它们之间有什么区别?

我使用基于Qt 5.1.1的QtCreator 2.8.1。我想开发一个桌面程序,应该使用哪种技术?


1
看看这里:qt-project.org/doc/qt-5.1/qtdoc/qtmodules.html(QML和快速基本上都是一样的东西两方-高科技本身和控制图书馆;现代的版本是qml2)
mlvljr

Answers:


18

编辑:请参阅@TheBootroo以获得更好的答案

尽管我的答案被OP接受,但我想修改(甚至删除)我的答案。

我的答案是基于2013年有关Qt 5.2的个人经验,其中一些今天不再有效:

  • QML是Qt元语言或Qt建模语言是用户界面标记语言。
  • QtQuick(QtQuick 1.x和QtQuick 2.x两者)都使用QML作为设计语言,用于设计以用户界面为中心的应用程序。

回到Qt 5.2,当您构建Qt Quick应用程序时,一个重要的问题是该应用程序是QtQuick 1.x还是QtQuick2.x。这不仅影响了可用的组件,而且改变了应用程序的呈现方式。

早在2013年:

  • 如果您必须针对较旧的操作系统(例如Windows XP)或较旧的硬件(例如OLPC),则通常选择QtQuick 1.x应用程序,因为QML UI组件(如Buttons)是由OS本身的组件呈现的。但是,这意味着您的目标是UI组件的最小公分母集,并且您的UI体验可能因平台而异。

  • 选择QtQuick 2.x应用程序是为了获得更加一致的跨平台外观,但是,它要求您的平台充分实施OpenGLES,否则,应用程序可能无法加载。不幸的是,这将您的应用程序限制为仅实现OpenGLES的最新计算机和设备。

当我写下原始答案时,这导致我在某些情况下推荐使用QtQuick 1.x,而不是QtQuick2.x。

但是,从那时起,Qt 5+现在允许您将Windows定位为ANGLE,这通过将调用转换为对Direct3D的调用,可以为Windows桌面带来高性能OpenGL兼容性,Direct3D具有更好的驱动程序支持。


1
在QML2引擎上,您错了,请看一下我的回答:QML2只是将QML1引擎重写为V8引擎。现在,由于V8与iOS不兼容,它正在移植到新引擎V4VM上!因此,发布问题的人正在使用Qt5.1,直到更新到Qt5.2 +,他才能在iOS上运行...
TheBootroo 2013年

谢谢@TheBootroo。我回答的目的是为什么您选择QML2而不是QML1。尽管OP正在使用Qt5.1.1,但我并未具体说明。我以QML2作为未来证明的方式澄清了我的答案,但是,仍然是真的,如果您的硬件不能充分交付QML2所需的足够的OpenGL,那么QML1可能是您的唯一选择。
Stephen Quan

2
我将删除整个“如果您不希望为iOS和Android开发(即仅在Windows平台上)开发”部分。QQ2应用程序可以在Windows,Linux,OSX,QNX上愉快地运行。
peppe

QQ2仅在我们办公室的一半机器上运行。其中一些是全新的Windows 8平板电脑。我们知道问题是由于图形卡未实现QQ2所需的所有OpenGL堆栈。
Stephen Quan

对OpenGL的依赖性已经变得更好,请参见此处以获取更多信息。
2015年

188

QML是语言的名称(就像C ++,这是另一种语言...)

QtQuick是用于QML的工具包,允许使用QML语言开发图形界面(还有其他用于QML的工具包,有些是图形的,例如Sailfish SilicaBlackBerry Cascade,而有些则是非图形的,例如QBS,可以代替QMake / CMake /使...)

QtQuick 1.x基于Qt4.x,并使用QPainter/ QGraphicsViewAPI绘制场景。QtQuick 2.X在Qt5.0的基础上进行了优化,该场景基于OpenGLES2抽象层Scene Graph。

通过Qt5.1,Scene Graph被增强为使用多线程(QtQuick 2.1)。通过Qt5.2,Scene Graph进行了很多优化,以减少CPU / GPU调用和内存使用量

QML引擎基于Qt4.x中的JsCore(Webkit的JS引擎),并基于5.0版本的V8(Google Chrome的JS引擎)进行了重新开发,但这不允许在移动设备(尤其是iOS)上使用它,因此Qt5.2引入了新的由Qt员工创建的QML引擎,名为V4VM。

还有QtQuick控件,它基本上是基于QtQuick的一组本机外观的小部件。它最初是为台式机设计的,但是Qt 5.4基于holo主题引入了Android的本地L&F。材质主题以及iOS主题正在开发中,但是从当前Qt版本(5.5)开始不可用。一些控件仅用于企业版,但在Qt5.5中将其重命名为Extras,现在可用于所有许可证。正在进行的另一项开发名为QtQuickControls 2,它是对Controls的完全重写,旨在针对轻型嵌入式UI获得更好的性能,它应该在Qt 5.6中的Tech Preview阶段。

从Qt5.5开始,有一个名为QtQuick3D的新模块,该模块提供了使用QML语言创建3D应用/游戏的功能。它不使用太面向2D / 2.4D的SceneGraph。为此,一个新引擎名为FrameGraph。

如果您开发现代应用程序,则应使用Qt5.x + QML 2.x + QtQuick 2.x,以尽可能扩大用户群。

通常,使用Qt时,请始终遵循更新,因为它们会添加更多功能,更多性能和更多平台。


20
这应该是“正确”的答案。这实际上描述了QML和QT Quick与数十亿个版本/插件之间的区别。干得好!
Mark Pieszak-Trilon.io 2014年

1
好总结。尽管要知道,从基于QPainter / QGraphicsView的QtQuick1迁移到基于OpenGL / QSG的QtQuick2并非完全没有缺点:例如,打印机支持取决于QPainter stackoverflow.com/q/20825233/24283
2015年

您忘记描述QtQml模块。
SMMousavi

更新列表可能会很好。如果我加入了Qt 5.11,该学什么,该忘记什么?-要知道:QtQuick2,QtQuickControls2,QtQuickExtra,QML2,.pro-要忘记:QtQuick1,QtQuickControls1,Widgets,QML1;什么还没结束?QBS,算了吧!
桑德堡

1
为什么使用V8不允许在移动设备上使用?
文森特·福尔蒙德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.