注意:在此答案中,“Qt Widgets”指的是 Qt Widgets 应用程序,在创建新的 Qt 应用程序时可选择。
这是该问题首次发布七年后...但这是我的“目标”两美分,以抵消此后的任何发展。
复习
语言
Qt Quick 项目使用 QML 和 JavaScript。
Qt Widgets 项目使用 C++ 代码。 (PyQt 和 PySide,Qt 的 Python 绑定,使用 Python。)
性能和编码
因此,与 Qt Quick 相比,Qt Widgets 可以被认为是低级的。但这意味着从长远来看,Qt Widgets 项目会运行得更快,性能更好。不过,低级可能是件好事,因为 Qt Widgets 更多地暴露于原生 API(QtCore module、Qt Style Sheets 等)。也就是说,它通常用于桌面开发。
Qt Quick 更适合移动开发(尽管它仍可用于桌面开发)。它具有即用型popups、animations、选项卡和布局、flickables、drawers 和常用控件;在移动开发中无处不在。
界面设计
两者都有 ui 文件,可与 QtDesigner 一起使用,为设置布局和创建界面提供高级视图。 (在 Qt Quick 中,扩展名是 .ui.qml。在 Qt 小部件中,它们是 .ui。).ui 文件不是强制性的,也不是必需的:您可以选择使用 QML/JS 或 C++/ 以编程方式进行设计和布局蟒蛇。
学习
如果您是完全编程新手,我建议您先看看 Qt Quick。就个人而言,我认为 Qt Quick 具有更温和的学习曲线,并且更容易完成无数项目。它被称为“Qt Quick”是有原因的。 (不过不要小看 Qt Widgets,它们有一些比 QtQuick 更出色的模块。)
但是,如果您以前使用过 C++ 或 Python 进行编程,我建议您先看看 Qt Widgets,以习惯它们的 signals and slot mechanism 和您可能感兴趣的模块(例如 sql、@987654330 @, gui) 以及编程设计(例如 model/view programming 用于显示数据)。
特别是对于 C++,大多数进行事件处理的非 Qt 库都使用while-loops,而 Qt 则不是这种情况。他们使用signals and slots。
最后,即使您主要使用 Qt 小部件,您也可能希望查看 Qt Quick,因为它提供了一种高级声明性语言可供使用,并允许您更快地进行设置。 (特别是对于移动开发。)
Qt 为Qt Quick 和Qt Widget 项目以及forum 提供了大量示例。从长远来看,您不必担心获得帮助。 (别忘了 *!)
Qt Quick + Qt 小部件
到目前为止,我们一直将它们视为独立的实体。但是可以integrate QML into C++。这使您可以利用 Qt Widget、C++ 和其他模块。例如,QtQuick 提供了一个TreeView,但不提供TreeModel,它可以/应该从 C++ 注册到 QML。通常有一个separation of concerns 的宣传,Qt 建议将程序分成 UI,将逻辑分别分成 QML 和 C++。
这也很方便,如果说您需要一个后端来处理密集的 SQL 查询、算法或异步 http/xml 请求。那不是很酷吗? QML/JS 前端加上一个 C++ 后端。全栈 Qt'er。 :-)
(我没有尝试过,有一个 Python 后端。我还没接触过 PyQt...)