【问题标题】:'Traditional Qt' or 'Qt Quick' for a desktop program? [closed]桌面程序的“传统 Qt”或“Qt Quick”? [关闭]
【发布时间】:2011-07-26 18:01:30
【问题描述】:

诺基亚刚刚在 Qt 最近的 beta 版本中引入了 Qt Quick(以声明方式构建 UI,就像使用 CSS/HTML 一样),查看此example page,它可以构建精美而现代的 UI,非常酷!

相反,“传统 Qt”开发的 UI 似乎不那么花哨(我可能错了,请参阅下面的免责声明)。

所以我的问题是,您会为新的桌面程序使用“传统 Qt”还是“Qt Quick”? 为什么?

我最初的想法:

'传统 Qt':

优点:

  • 使用的整体技术更少,因此更简单,如果你使用PySide,你只用Python编写代码,不必在Qt Quick中搞乱CSS/JS之类的东西;

  • 它更成熟了。

    缺点:

  • 构建精美的 UI 似乎更困难?

'Qt 快速':

优点和缺点:反过来。

Edit: Qt Quick 有一个缺点,如果我错了,请纠正我,你不能以所见即所得的方式设计 Qt Quick UI,对吧?

免责声明:我是 Qt、PySide 和 Python 的新手,最近才开始评估使用这些技术构建桌面程序。

【问题讨论】:

    标签: qt qt4 qt-quick


    【解决方案1】:

    我对传统的 Qt UI 系统没有这么多的经验。但我可以给你我在 QtQuick 上的经验:

    • 使用 QML 的 UI 更简单。
    • QML 使您能够更好地使用 MVC 模式进行开发。它使视图与模型分离。您可以在运行时加载不同版本的 UI。
    • QML 支持开发高级 UI。
    • 现在性能非常好(使用 QSceneGraph 技术)。它在多个 UI 线程上实现!我不确定您是否可以再使用 C++ 制作性能更高的 UI!
    • UI设计师可以开发比HTML+CSS+Javascript更简单的UI!
    • 您可以使用特定类通过 C++ 开发自定义 UI 元素。
    • QML 基于 OpenGL,在 Qt 的免费版本中您需要注意这一点。
    • QML 有一个特定的调试器和分析器。在 UI 中调试非常简单。

    如果您想使用 MVC 等标准模式开发应用,QML 可能更适合。
    您需要注意性能说明。

    【讨论】:

      【解决方案2】:

      我的桌面一直在搞乱 qml,我个人发现了这个:

      • 它比传统的 qt/c++/pyqt 更容易创建动画(我喜欢动画 :)
      • 我没有查看所有示例,但 qml 应用程序的代码大小看起来比 C++ 中的等效应用程序小

      我在 qml 中发现的问题

      • 对 qml 设计的支持很差 - 目前自定义元素没有出现在 qml 设计器中。这是一个很大的痛苦,因为理想情况下我应该让设计师来创建我的 ui 并且我专注于代码。他们的 qml 设计师还需要一些工作
      • 您应该学习 javascript,因为它是 qt 中“推荐”的脚本编写方式。 Javascript 并不像您所期望的那样容易,例如学习 python 花了我几个小时,但 javascript 看起来与 c 表面上相似,但它的一些概念不同。另外我想知道我是否可以在仅使用 javascript 和 qml 编写的应用程序中保护知识产权。(如果我错了,请纠正我)
      • 原生小部件在 qml 中不可用,例如它只提供矩形等,您可以将它们组合起来形成自己的小部件。

      这并没有阻止我玩qml,随着它的成熟,我将采取观望态度。目前我将 qml 用于我的部分 ui 和 c++ 作为后端。

      【讨论】:

      • 非常感谢 Deo 博士!这个信息正是我想要的——QML 的缺点。还有一个问题,我们可以用qt做程序的主GUI,用QML来实现部分UI吗?
      • 是的。有一个名为 QDeclarativeView 的小部件可以托管 QML 内容。尽管他们的示例并不理想,但请参阅此站点。 idlebox.net/2010/apidocs/qt-everywhere-opensource-4.7.0.zip/…
      • @Edwin:您还可以查看 Qt 中声明性示例下的示例文件夹。它展示了许多使用 qt 的有据可查的方法,包括如何在程序的主 GUI 中使用它。
      • 谢谢迪奥博士。有据可查是 lib 的必备条件。
      • QML/Qt-Quick 把我所有的注意力都放在了“希望学习 javascript”上。 (然后当你说“本地小部件不可用”时,我自己开膛破肚)。
      【解决方案3】:

      您犯了一个错误:Qt Quick 不仅仅在 Qt 的 beta 版本中可用。自 4.7 以来,它一直是 Qt 官方版本的一部分(尽管每个次要版本都显着改进了 Qt Quick 提供的功能)。

      虽然“正常”的 Qt UI(带有 QWidgets 和布局等)较旧,但这并不一定意味着 Qt Quick 不成熟。毕竟,它是发布的一部分。

      你没有在你的优点和缺点中指出的一件事是性能:“正常”Qt UI 是预先构建的(基本上,大部分情况下),Qt Quick UI 依赖于 QML 和 CSS/HTML 的运行时解释说。这基本上不会影响桌面系统上的应用程序速度,但是如果您因为 UI 太花哨而遇到性能瓶颈,请不要说我没有警告您。虽然这样的瓶颈可能意味着您应该从一开始就使用 OpenGL。

      Qt Quick 提供了一种构建酷炫 UI 的简单方法(无论如何这就是卖点),并且可以让您以比旧东西更轻松的方式使用更酷的效果。

      【讨论】:

      • 谢谢,是的,性能是我关心的关键。
      • Qt Quick(和 QGraphicsView)将在 Qt5 内部使用 OpenGL(或者我听说过)
      【解决方案4】:

      如果您使用的是 Python,那么您可能并不关心性能。传统的 Qt 也可以通过 QSS 实现花哨的外观。 Qt Quick 提供的是一种轻松构建 UI 的方法(即使没有 4.8 中引入的工具支持)并使用脚本使其工作。

      您也可以使用传统的 Qt 制作精美的 UI,主要是通过 QSS 和派生现有的小部件。大多数 Qt 示例并不关注这一点,但这并不意味着它不能完成。它还可能提供更好的整体性能,尤其是使用 C++ 编码时。

      我会使用传统的 Qt,因为我更熟悉它。但这无论如何都是主观的,所以我认为你的问题将被关闭。

      【讨论】:

      • 关于 QSS 的部分拯救了我。以前我在想我必须使用 QtQuick 在我的 Qt 应用程序中拥有自定义样式。在 Qt 示例中检查 QSS 之后,这就是我要走的路
      • @swdev 在过去的三年里,QtQuick 已经获得了硬件加速,因此性能部分与我的回答不再相关。尽管如此,QSS 仍然可用。
      • 常见的小部件呢?还没有检查出来,但 QtQuick 是否已经支持它们,例如按钮、文本编辑等?
      • @swdev,是的,现在可以了(对于桌面,它们是原生的,但还不是安卓)。 qt-project.org/wiki/Qt_Quick_Components
      猜你喜欢
      • 2014-08-09
      • 2012-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-24
      • 2014-02-12
      • 2013-04-09
      相关资源
      最近更新 更多