我对 QML、QtQuick 1.0 和 QtQuick 2.0 感到困惑。他们之间有什么区别?
我使用基于 Qt 5.1.1 的 QtCreator 2.8.1。我想开发一个桌面程序,我应该使用哪种技术?
QML 是语言的名称(就像 C++,它是另一种语言......)
QtQuick 是 QML 的工具包,允许用 QML 语言开发图形界面(还有其他 QML 工具包,有些是图形的,如 Sailfish Silica 或 BlackBerry Cascade,有些是非图形的,如 QBS QMake/CMake/make...)
QtQuick 1.x 基于 Qt4.x 并使用 QPainter
/QGraphicsView
API 来绘制场景。 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 引入了一个新的QML 引擎,名为 V4VM,由/为 Qt 开发人员创建。
还有 QtQuick 控件,它基本上是一组基于 QtQuick 的本地外观小部件。它最初是为桌面设计的,但 Qt 5.4 为 Android 引入了基于 holo 主题的原生 L&F。材质主题和 iOS 主题正在开发中,但在当前 Qt 版本 (5.5) 中不可用。一些控件仅适用于 Enterprise,但在 Qt5.5 中它们被重命名为 Extras,并且它们现在可用于所有许可证。另一项开发正在进行中,名为 QtQuickControls 2,它是对 Controls 的完全重写,以获得更好的性能,针对轻型嵌入式 UI,它应该在 Qt 5.6 的技术预览阶段。
从 Qt5.5 开始,有一个名为 QtQuick3D 的新模块,它提供了使用 QML 语言创建 3D 应用程序/游戏的能力。它不使用过于面向 2D/2.4D 的 SceneGraph。为此使用了一个名为 FrameGraph 的新引擎。
如果您开发现代应用程序,您应该使用 Qt5.x + QML 2.x + QtQuick 2.x,以接触尽可能多的用户群。
对于 Qt,一般来说,始终关注更新,因为它们添加了更多功能、更多性能和更多平台。
编辑:请参阅@TheBootro 以获得更好的答案
尽管我的答案被 OP 接受,但我想修改(甚至)删除我的答案。
我的回答是基于 2013 年 Qt 5.2 的个人经验,其中一些在今天不再有效:
QML 是 Qt Meta Language 或 Qt Modeling Language 是一种用户界面标记语言。
QtQuick(QtQuick 1.x 和 QtQuick 2.x)使用 QML 作为声明性语言来设计以用户界面为中心的应用程序。
回到 Qt 5.2,当您构建 Qt Quick Application 时,一个重要的问题是该应用程序是 QtQuick 1.x 还是 QtQuick 2.x。这不仅影响了可用的组件,而且还改变了应用程序的呈现方式。
回到 2013 年:
如果您必须针对较旧的操作系统(例如 Windows XP)或较旧的硬件(例如 OLPC),通常会选择 QtQuick 1.x 应用程序,因为 QML UI 组件(例如按钮)是由您的操作系统本机组件呈现的。但是,这意味着您的目标是一组最低公分母的 UI 组件,并且您的 UI 体验可能因平台而异。
选择 QtQuick 2.x 应用程序以获得更一致的跨平台外观,但是,它要求您的平台充分实现 OpenGLES,否则您的应用程序可能无法加载。不幸的是,这将您的应用程序限制为仅支持实现 OpenGLES 的最新计算机和设备。
当我写下我的原始答案时,这导致我在某些情况下推荐 QtQuick 1.x 而不是 QtQuick 2.x。
然而,从那时起,Qt 5+ 现在允许您在 Windows 上定位 ANGLE,通过转换对 Direct3D 的调用来为 Windows 桌面带来高性能的 OpenGL 兼容性,Direct3D 具有更好的驱动程序支持。