Qt Quick与Qt小部件[关闭]


80

我是Qt的新手,对Qt Quick Project和Qt Widget Project之间的区别不太了解。

我希望创建一个程序,该程序绘制一个六边形的网格,用户可以旋转和剪切该网格,以及平移和缩放。最终它将成为MIDI控制器。哪种类型的项目对此更好,为什么?

我希望它可以在台式机和移动平台上都能使用。


3
花一些时间在Qt Quick网站上,看看周围的例子。如果这是您需要的,请使用它。如果不是这样,通常的Qt小部件项目就可以使用,但是移动平台可能会成为问题。

Answers:


40

注意: Qt Widget已被QML Widget取代;此答案回答了所提出的问题,现在严格来说,这是有关旧Qt小部件的历史问题。

Qt Quick是一种声明性的,智能手机风格的用户界面,支持许多智能手机应用程序中常见的炫酷动画过渡。快速也是快速开发原型的好选择。Qt Widget是传统的面向桌面的UI模型。

目前(Qt5之前的版本),Qt Quick对桌面系统功能的支持不足(但仍在改进)。在Quick中,对菜单,工具栏,对话框和其他标准桌面行为的支持并不多,而Widget对这些元素的支持非常好。

您是要让应用在桌面和平板电脑平台上看起来还是本地的,还是要围绕自己的自定义UI小部件构建一个简单的应用?正如Mat所说,如果Qt Quick支持所需的功能,那可能是最快的方法。如果要构建功能齐全的桌面版本,Qt Widget可能是您最好的选择。


1
我都想要 :)现在使用Qt Widget。
安东尼

10
就像我们现在在Qt 5.0之后,这个答案应该被删除,编辑或降低表决,我们甚至接近6.0,而Qt Widgets已被QML Widgets取代。
Ariel M.

答案还是问题?似乎您是在说这个问题不再重要。
AndrewS

14
QML并不能替代Qt Widgets,即使在2019年,至少直到它替代Qwt,QCustomPlot等项目,似乎并非如此。直到这只是另一种实现方式,再也没有少了。
安德里

1
Qwt和QCustomPlot是第三方项目,而不是QtWidgets的一部分,因此无论是否移植它们都无关紧要。此外,Anthony是一名新手,他正在询问有关需要需要大量自定义UI的MIDI控制器的创建(请参阅Arena,Lemur PS Elements和类似软件)。QML是必经之路。
Ariel M.

37

作为专业开发qt应用程序的人,我每天都会选择qml而不是小部件。

窗口小部件非常适合最基本的东西,但是一旦您需要创建更花哨的东西,窗口小部件很快就会不足。

Qml更加灵活,您可以在任何位置锚定项目,而不必使用受限的窗口小部件布局系统。窗口小部件充满了这些缺陷时,几乎没有平台相关性缺陷。属性绑定系统使用户界面与模型保持同步非常容易。


3
谢谢!我只是根据您的回答中所述的专业背景,决定从QML / QtQuick开始。只是意识到我可以轻松使用QtCreator的* .ui.qml并将其直接在PyQt中使用。解决了我的Python + QtQuick初始设置!
swdev

2
对复杂的桌面程序使用QtQuick在性能上是个坏主意……
Yousha Aleayoub

也许您对布局API没有足够的经验?您可以用QML做什么而不能用小部件做什么的任何示例?我与Qt一起在全球拥有10K用户的应用程序上合作了5年以上,我们使用Widgets是因为只有它们才能提供无限的功能。QML适用于原型和小型项目。是的,性能很重要。另外,由于QML是OpenGL驱动的,因此如果您的用户群中装满了旧硬件,则这是一个显示停止器。
Dalamber

34

注意:在此答案中,“ 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设计

两者都具有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控件首先,要习惯他们的信号和插槽机制和模块您可能感兴趣的(例如sqlnetworkgui)一起编程设计(如用于显示数据的模型/视图编程)。

尤其是对于C ++,大多数执行事件处理的非Qt库都使用while-loops,而Qt并非如此。他们使用信号和插槽

最后,即使您主要使用Qt窗口小部件,您也可能要看一下Qt Quick,因为它提供了可使用的高级声明性语言,并使您可以更快地进行设置。(特别是用于移动开发。)

Qt提供了大量有关Qt QuickQt Widget项目的示例,以及一个论坛。从长远来看,您不必担心会获得帮助。(不要忘记StackOverflow!)

Qt Quick + Qt小部件

到目前为止,我们一直将它们视为独立的实体。但是可以将QML集成到C ++中。这使您可以利用Qt Widget,C ++和其他模块。例如,QtQuick提供了TreeViewa TreeModel,但没有提供a ,可以/应该将其从C ++注册到QML中。通常情况下,关注点分离的,Qt建议将程序分别分离为UI和逻辑分离为QML和C ++。

如果说,这也很方便,例如,您需要后端来进行大量的SQL查询,算法或异步http / xml请求。那不是很酷吗?QML / JS前端以及C ++后端。全栈Qt'er。:-)

(我还没有尝试过,有一个Python后端。我还没有接触过PyQt ...)


7

Qt Quick默认为QML,启用了嵌入式ECMAscript的JSON声明性方言。使用Qt小部件,设计人员可以制作样式表,而开发人员可以进行本机C ++编码。

QML在运行时处理。在框架内,所有东西都可以一起运行,这些差异只是为软件架构师的决策增加了灵活性。


5

首先,我认为您应该从Widget开始。如果您以前的经验是关于前端的,那么Widget UI可以帮助您轻松轻松地学习qt。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.