【问题标题】:Implement with QML or C++?用 QML 还是 C++ 实现?
【发布时间】:2013-09-02 08:53:04
【问题描述】:

我最近才开始学习 Qt,发现 QML 对于实现 UI 组件非常有趣。在项目真正开始之前,我有一些问题:

  • 对于一个全新的项目,我应该只使用 QML 吗? QML 是为替代 QWidget 而设计的吗?)
  • 如果我使用 QML,是否还有其他必须使用 C++ 实现的内容?还是用 C++ 更好地实现以获得更好的性能? (我知道一些定制的 UI 组件可以通过插件集成) QML 和 C++ 小部件有什么关系?
  • 关于性能或渲染问题,QML 是否优于原生 C++ 小部件?

【问题讨论】:

  • 在使用QPainter 风格的 API 时无法克服基于 QWidget 的渲染的性能限制。这就是许多人没有得到的,因为他们对QPainter 风格的 API 的过时程度并不十分熟悉。它至少可以追溯到 1984 年的原始 MacOS,如果不是更早的话。在设计时,现代 GPU 是科幻小说。没有办法通常使这个 API 表现良好。总有办法让它在任何给定的情况下表现良好,但没有办法一概而论。 Qt Quick 2 的场景图在性能方面是未来。都是 C++!
  • 一般来说,使用 QML 创建您的 GUI 并使用 JavaScript 进行一些轻型计算。每当计算或操作很复杂,或者 JavaScript 对您来说还不够时,请使用 C++。您也可以在 QML 文件中使用 QtQuick 控件。请记住,MVC 方法是 QML+C++ 应用程序的不错选择。

标签: qt qml qt5 qtquick2


【解决方案1】:

当您以“我应该使用”作为问题的开头时,这是一个很好的暗示,表明 SO 可能不是问它的正确位置。更何况只有以“取决于...”开头的答案。

QML 并非旨在取代 QWidget。这是一种不同的技术。使用哪一种,取决于您的要求。

您是否必须在 C++ 中实现额外的东西取决于您的项目。有些事情在 C++ 中更容易,而在 QML 中有些事情。有些东西在 QML 中根本不可能。

QML 和 C++ 小部件之间没有关系。

QML 的性能在大多数情况下绰绰有余。几乎在所有情况下,QML 都用于创建用户界面。我怀疑在很多情况下单击按钮或打开保管箱文件夹对性能至关重要。

【讨论】:

    【解决方案2】:

    我有机会在今天的世界峰会上向几位 Qt 专家提出这个问题,大家普遍认为,由于 QML 组件渲染可以通过硬件加速完成,因此它更适合需要高性能图形的应用程序,例如汽车仪表板。 OTOH 小部件似乎用于桌面应用程序。另一个考虑因素是,虽然小部件可以使用 Qss(Qt 的 Css 版本)设置样式,但 QML 组件不能。

    在基于 QML 的应用程序中,计算密集型函数通常用 C++ 编写。

    HTH,

    埃里克·G

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2017-10-06
      • 2013-08-13
      • 2015-11-21
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      相关资源
      最近更新 更多