Qt Quick vs. Qt Widget

Ant*_*ony 68 qt

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

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

我希望这可以在桌面和移动平台上工作.

And*_*ewS 35

注意: Qt Widgets已被QML Widgets取代; 这个答案回答了所提出的问题,现在这个问题严格来说是一个关于旧Qt Widgets的历史问题.

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

目前(Qt5之前),桌面系统功能的Qt Quick支持缺乏(但正在改进).Quick中没有对菜单,工具栏,对话框和其他标准桌面行为的支持,而Widget非常支持这些元素.

您希望您的应用在桌面和平板电脑平台上看起来和感觉原生,或者您是否围绕自己的自定义UI小部件构建了一个简单的应用程序?正如Mat所说,如果Qt Quick支持您想要的功能,那么这可能是您最快的方法.如果你想构建全功能的桌面版本,Qt Widget可能是你最好的选择.

  • QML不能替代Qt Widgets,即使在2019年也是如此,至少直到它替代Qwt,QCustomPlot等项目,似乎并非如此。直到这只是另一种实现方式时,再也不会少了。 (9认同)
  • 这个答案应该被移除,编辑或者投票,因为我们现在在Qt 5.0中,我们甚至接近6.0并且Qt Widgets被QML Widgets取代. (8认同)
  • @Ariel M. Qt Widgets 不会被取代,也不可能被取代,至少在所有内容都被重写之前,情况并非如此。 (2认同)

Tei*_*mpz 32

作为专业开发qt应用程序的人,我会在任何一天选择qml而不是小部件.

小部件对于非常基本的东西是好的,但是我曾经需要创建一些更加花哨的东西,小部件很快就会出现问题.

Qml更灵活,您可以将项目锚定在任何地方,而不是使用有限的小部件布局系统.当小部件充满了这些缺陷时,几乎没有平台依赖性缺陷.财产装订系统使得你的ui与你的模型保持同步非常容易.

  • 谢谢!我刚刚决定从QML/QtQuick开始,基于你答案中陈述的专业背景.刚刚意识到我可以轻松使用QtCreator中的*.ui.qml并直接在PyQt中使用它.解决了我最初的Python + QtQuick设置! (3认同)
  • 对复杂的桌面程序使用QtQuick在性能上是个坏主意... (2认同)
  • 也许您对布局 API 的经验还不够?有什么例子可以说明 QML 可以做而 Widget 不能做的事情吗?我使用 Qt 开发应用程序已超过 5 年,在全球拥有 1 万用户,我们使用 Widget 是因为只有它们才能提供无限的功能。QML 适合原型和小型项目。是的,性能很重要。此外,由于 QML 是 OpenGL 驱动的,如果您的用户群充满了旧硬件,这将是一个阻碍。 (2认同)

Tre*_*edJ 18

注意:在本回答中,"Qt Widgets"是指Qt Widgets应用程序,可在创建新Qt应用程序时选择.

这是问题首次发布后的七年......但这是我的目标两美分,以中和从那时起的任何发展.

复习

语言

Qt Quick项目使用QML和JavaScript.

Qt Widgets项目使用C++代码(或PyQt/PySide中也有Python).

性能和编码

因此,与Qt Quick相比,Qt Widgets可被视为低级别.但这意味着从长远来看,Qt Widgets项目运行速度更快,性能更好.低级别可能是好的,因为Qt Widgets更多地暴露于本机API(QtCore模块,QtStyleSheets等).也就是说,大多数人更喜欢用于桌面开发的Qt Widgets.

除此之外,C++/Python比JS更严格.这可能是一件好事,因为你有更多的自由.(但QtCreator 发出警告,所以这不应该是一个缺点.只记得写清洁代码,而不是意大利面.)

Qt Quick,更适合移动开发(它仍可用于桌面开发).它有现成的弹出式窗口(可拖动的侧面板),动画,标签视图,可滑动的按钮,滑动器和进度条; 一切都是为了加快移动开发.

UI设计

两者都有ui与QtDesigner一起使用的文件,提供了用于设置布局,创建界面等的高级接口.(在Qt Quick中,这是.ui.qml.在Qt Widgets中,这是.ui.)您也可以使用QML/JS以编程方式执行此操作. C++,所以这.ui不一定是强制性的.

学习

如果你对编程完全不熟悉,我建议先看看Qt Quick.就个人而言,我认为Qt Quick有一个更温和的学习曲线,更容易合作完成无数的项目.恕我直言,它被称为"Qt Quick ",这是因为完成任务或设计所需的代码通常较少,因此您可以快速制定您正在计划的任何魔法.(不要小看QtWidgets,他们有一些超越QtQuick的好模块.)

但是,如果你已经用C++或Python之前编程,我建议考虑看看Qt控件首先,要习惯他们的sql机制和他们有任何模块(例如network,gui,while)一起编程设计(如模型/视图编程用于显示表格或数据).

特别是对于C++,大多数使用TreeView-loops 进行事件处理的非Qt库,Qt 不是这种情况.他们使用信号和插槽.

最后,即使您主要使用Qt Widgets,您也可以查看Qt Quick,因为它提供了一种高级语言,可以让您更快地进行设置.(特别是对于移动开发.)

Qt为Qt QuickQt Widget项目提供了丰富的示例,以及一个活跃的论坛.因此,从长远来看,您不必担心获得帮助.(别忘了StackOverflow!)

组合

请注意,还可以将QML与C++集成.这允许您利用Qt Widget和C++功能.(例如QtQuick提供TreeModel但不是a ui,模型需要从C++注册到QML中.)

如果您需要强烈的SQL查询或http/xml请求的后端,这也会派上用场.那不是很酷吗?QML/JS前端加上C++后端.Fullstack Qt'er.:-)

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


Cha*_*pul 7

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

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


小智 5

首先,我认为你应该从Widget开始.Widget UI有助于您轻松学习qt,如果您之前的经验是关于前端的事情,您将很容易学习.