【问题标题】:Difference between qt qml and qt quickqt qml 和 qt quick 的区别
【发布时间】:2013-11-10 20:19:48
【问题描述】:

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

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

【问题讨论】:

标签: qt qml qt-quick qtquick2


【解决方案1】:

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

虽然我的回答已被 OP 接受,但我想修改(甚至)删除我的回答。

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

  • QML 是 Qt 元语言或 Qt 建模语言是一种用户界面标记语言。
  • QtQuick(QtQuick 1.x 和 QtQuick 2.x)使用​​ QML 作为声明性语言来设计以用户界面为中心的应用程序。

回到 Qt 5.2,当您构建 Qt Quick 应用程序时,一个重要的问题是该应用程序是 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 具有更好的驱动程序支持。

【讨论】:

  • 你在QML2引擎上大错特错,看我的回答:QML2只是QML1引擎在V8引擎上的重写。现在它被移植到新引擎 V4VM 上,因为 V8 不兼容 iOS!因此,由于发布问题的人使用的是 Qt5.1,因此在更新到 Qt5.2+ 之前,他不会在 iOS 上运行...
  • 感谢@TheBootro。我回答的目的是为什么你会选择 QML2 而不是 QML1。即使 OP 使用的是 Qt5.1.1,我也没有具体说明。我澄清了我的答案,引用 QML2 作为未来证明的一种手段,但是,如果您的硬件不能充分提供 QML2 所需的足够 OpenGL,那么 QML1 可能是您唯一的选择。
  • 我会删除整个“如果您对为 iOS 和 Android 开发(即仅在 Windows 平台上)不感兴趣”部分。 QQ2 应用程序可以在 Windows、Linux、OSX、QNX 上愉快地运行。
  • QQ2 只在我们办公室一半的机器上运行。其中一些是全新的 Windows 8 平板电脑。我们知道问题是由于显卡没有实现 QQ2 所需的所有 OpenGL 堆栈。
  • 对 OpenGL 的依赖得到了改善,更多信息请参阅here
【解决方案2】:

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

QtQuick 是一个用于 QML 的工具包,允许使用 QML 语言开发图形界面(QML 还有其他工具包,有些是图形的,如Sailfish SilicaBlackBerry 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 开发人员/为 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,一般来说,始终关注更新,因为它们添加了更多功能、更多性能和更多平台。

【讨论】:

  • 这应该是“正确”的答案。这实际上描述了 QML 和 QT Quick 之间的差异,以及数十亿的变体/插件。干得好!
  • 很好的总结。尽管请注意,从基于 QPainter/QGraphicsView 的 QtQuick1 迁移到基于 OpenGL/QSG 的 QtQuick2 并非完全没有缺点:例如,打印机支持依赖于 QPainter stackoverflow.com/q/20825233/24283
  • 你忘记描述 QtQml 模块了。
  • 更新列表可能会很好。如果我陷入 Qt 5.11,该学习什么,忘记什么? - 要知道:QtQuick2、QtQuickControls2、QtQuickExtra、QML2、.pro - 要忘记:QtQuick1、QtQuickControls1、Widgets、QML1;什么没有完成? QBS,算了吧!
  • 为什么使用 V8 不允许在移动设备上使用?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
相关资源
最近更新 更多