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