我是 Qt 新手,不太了解 Qt Quick Project 和 Qt Widget Project 之间的区别。
我希望创建一个程序来绘制用户可以旋转和剪切的六边形格子,以及平移和放大和缩小。它最终将成为一个 MIDI 控制器。哪种类型的项目更适合这个,为什么?
我希望这适用于桌面和移动平台。
注意:在这个答案中,“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 模块、Qt 样式表等)。也就是说,它通常用于桌面开发。
Qt Quick 更适合移动开发(尽管它仍可用于桌面开发)。它有现成的弹出窗口、动画、选项卡和布局、轻弹、抽屉和常用控件;在移动开发中无处不在。
两者都有ui
与 QtDesigner 一起使用的文件,为设置布局和创建界面提供高级视图。(在 Qt Quick 中,扩展是.ui.qml
. 在 Qt Widgets 中,它们是.ui
。)这些.ui
文件不是强制性的,也不是必需的:您可以选择使用 QML/JS 或 C++/Python 以编程方式进行设计和布局。
如果您对编程完全陌生,我建议您先看看 Qt Quick。就个人而言,我认为 Qt Quick 的学习曲线更平缓,并且更容易完成无数项目。它被称为“Qt Quick ”是有原因的。(不过不要小看 Qt Widgets,它们有一些比 QtQuick 更好的模块。)
但是,如果您以前使用过 C++ 或 Python 编程,我建议您先看看 Qt Widgets,以习惯它们的信号和插槽机制以及您可能感兴趣的模块(例如sql
,、network
)gui
以及编程设计(例如用于显示数据的模型/视图编程)。
尤其是对于 C++,大多数进行事件处理的非 Qt 库都使用while
-loops,而 Qt 并非如此。他们使用信号和插槽。
最后,即使您主要使用 Qt Widgets,您也可能希望查看 Qt Quick,因为它提供了一种高级声明性语言可供使用并允许您更快地进行设置。(特别是对于移动开发。)
Qt 为Qt Quick和Qt Widget项目提供了丰富的示例,以及一个论坛。从长远来看,您不必担心获得帮助。(不要忘记 StackOverflow!)
到目前为止,我们一直将它们视为独立的实体。但是可以将 QML 集成到 C++中。这使您可以利用 Qt Widget、C++ 和其他模块。例如,QtQuick 提供 aTreeView
但不是 a TreeModel
,它可以/应该从 C++ 注册到 QML。通常存在关注点分离,Qt 建议将程序分离到 UI 中,将逻辑分离到 QML 和 C++ 中。
这也很方便,如果说您需要一个用于密集 SQL 查询、算法或异步 http/xml 请求的后端。那不是很酷吗?QML/JS 前端加上一个 C++ 后端。全栈 Qt'er。:-)
(我还没有尝试过,有一个 Python 后端。我还没有接触过 PyQt ......)
注意: Qt Widgets 已被 QML Widgets 取代;这个答案回应了所提出的问题,现在严格来说这是关于旧 Qt 小部件的历史问题。
Qt Quick 是一个声明式的智能手机风格的用户界面,支持智能手机应用程序中常见的许多很酷的动画过渡。Quick 也是快速开发原型的不错选择。Qt Widget 是传统的面向桌面的 UI 模型。
目前(Qt5 之前),Qt Quick 对桌面系统功能的支持尚不完善(但正在改进)。Quick 中对菜单、工具栏、对话框和其他标准桌面行为的支持并不多,而 Widget 对这些元素的支持非常好。
您是否希望您的应用程序在桌面和平板电脑平台上看起来和感觉是原生的,或者您是否正在围绕您自己的自定义 UI 小部件构建一个简单的应用程序?正如 Mat 所说,如果 Qt Quick 支持您想要的功能,那可能是您最快的方法。如果您想构建功能齐全的桌面版本,Qt Widget 可能是您的最佳选择。
作为专业开发 qt 应用程序的人,任何一天我都会选择 qml 而不是小部件。
小部件适用于非常基本的东西,但是一旦你需要创建一些更花哨的东西,小部件很快就会失效。
Qml 更加灵活,您可以将项目锚定在任何您想要的位置,而不是使用受限的小部件布局系统。几乎没有平台依赖性缺陷,而小部件充满了这些缺陷。属性绑定系统让你的用户界面与模型保持同步变得非常容易。
首先,我认为你应该从 Widget 开始。如果您以前的经验是关于前端的东西,那么小部件 UI 有助于轻松学习 qt,您可以轻松快速地学习。
Qt Quick 默认为 QML,启用内联 ECMAscript 的 JSON 声明方言。使用 Qt 小部件,设计人员可以制作样式表,而开发人员则可以进行本机 C++ 编码。
QML 在运行时处理。在框架内,一切都可以一起运行,不同之处只是为软件架构师的决策增加了灵活性。