ChatGPT解决这个技术问题 Extra ChatGPT

Qt Quick 与 Qt Widget [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。 2年前关闭。改进这个问题

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

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

我希望这适用于桌面和移动平台。

花点时间在 Qt Quick 网站上查看示例。如果这是您需要的,请使用它。如果没有,请使用普通的 Qt 小部件项目,但移动平台可能会成为问题。
更新了 Mat 评论的链接 doc.qt.io/qt-5/qtquick-index.html
更新了 Ayxan Haqverdili 评论的链接 doc.qt.io/qt-6/qtquick-index.html

T
TrebledJ

注意:在这个答案中,“Qt Widgets”是指一个 Qt Widgets 应用程序,在创建新的 Qt 应用程序时可以选择。

这是问题首次发布七年后......但这是我的“目标”两美分,以抵消此后的任何发展。

复习

Qt Quick 项目使用 QML 和 JavaScript

Qt Widgets 项目使用 C++ 代码。 (PyQt 和 PySide,Qt 的 Python 绑定,使用 Python。)

性能和编码

因此,与 Qt Quick 相比,Qt Widgets 可以被认为是低级的。但这意味着从长远来看,Qt Widgets 项目会运行得更快,性能更好。不过,低级可能是件好事,因为 Qt 小部件更多地暴露于原生 API(QtCore moduleQt Style Sheets 等)。也就是说,它通常用于桌面开发。

Qt Quick 更适合移动开发(尽管它仍可用于桌面开发)。它具有即用型 popupsanimations、选项卡和布局、flickablesdrawers 和常用控件;在移动开发中无处不在。

用户界面设计

两者都有与 QtDesigner 一起使用的 ui 文件,为设置布局和创建界面提供高级视图。 (在 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,以习惯它们的 signals and slot mechanism 和您可能感兴趣的模块(例如 sqlnetwork、{ 4})以及编程设计(例如用于显示数据的model/view programming)。

特别是对于 C++,大多数进行事件处理的非 Qt 库都使用 while-循环,而 Qt 则不是这种情况。他们使用 signals and slots

最后,即使您主要使用 Qt Widgets,您也可能希望查看 Qt Quick,因为它提供了一种高级声明性语言可供使用并允许您更快地进行设置。 (特别是对于移动开发。)

Qt 为 Qt QuickQt Widget 项目以及 forum 提供了大量示例。从长远来看,您不必担心获得帮助。 (不要忘记 StackOverflow!)

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 ......)


谢谢,这是对 Qt 中 UI 选项的有用介绍。
A
AndrewS

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

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

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

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


我想要两个。 :) 现在使用 Qt Widget。
这个答案应该被删除、编辑或否决,因为我们现在处于 Qt 5.0 后,我们甚至接近 6.0 并且 Qt Widgets 被 QML Widgets 取代。
即使在 2019 年,QML 也不是 Qt Widgets 的替代品,至少在它取代 Qwt、QCustomPlot 和其他一些项目之前,情况似乎并非如此。直到它只是另一种实现方式,不多不少。
@Ariel M. Qt Widgets 没有被取代,也不能被取代,至少在一切都被重写之前,情况并非如此。
Qwt 和 QCustomPlot 是第三方项目,而不是 QtWidgets 的一部分,因此它们是否被移植无关紧要。此外,Anthony 是一个新手,他询问创建一个需要高度定制 UI 的 MIDI 控制器(请参阅 Arena、Lemur PS Elements 和类似软件)。 QML 是要走的路。
T
Teimpz

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

小部件适用于非常基本的东西,但是一旦你需要创建一些更花哨的东西,小部件很快就会失效。

Qml 更加灵活,您可以将项目锚定在任何您想要的位置,而不是使用受限的小部件布局系统。几乎没有平台依赖性缺陷,而小部件充满了这些缺陷。属性绑定系统让你的用户界面与模型保持同步变得非常容易。


谢谢!根据您在回答中说明的专业背景,我刚刚决定从 QML/QtQuick 开始。只要意识到我可以轻松地使用来自 QtCreator 的 *.ui.qml 并直接在 PyQt 中使用它。解决了我对 Python + QtQuick 的初始设置!
将 QtQuick 用于复杂的桌面程序在性能上是个坏主意......
也许您对布局 API 的经验不够丰富? QML 可以做什么,而 Widget 不能做什么?我在全球拥有 10Ks 用户的应用程序上与 Qt 合作超过 5 年,我们使用小部件,因为只有它们才能提供无限的功能。 QML 适用于原型和小型项目。是的,性能很重要。此外,由于 QML 是 OpenGL 驱动的,因此如果您的用户群充满了旧硬件,这将是一个障碍。
或者当前具有不支持 OpenGL 的图形芯片组的硬件,即大多数笔记本电脑的 GPU。
@AlanB 请问现在哪些笔记本电脑 GPU 不支持 OpenGL?
m
myd0

首先,我认为你应该从 Widget 开始。如果您以前的经验是关于前端的东西,那么小部件 UI 有助于轻松学习 qt,您可以轻松快速地学习。


C
Chawathe Vipul S

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅