Qt Quick vs. Qt Widget

时间:2011-12-24 19:04:53

标签: qt

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

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

我希望这可以在桌面和移动平台上运行。

5 个答案:

答案 0 :(得分:32)

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

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

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

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

答案 1 :(得分:29)

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

小部件对于最基本的东西是好的,但是一旦你需要创建一些更加花哨的东西,小部件很快就会失败。

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

答案 2 :(得分:11)

注意:在此答案中,“ 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 moduleQt Style Sheets等),因此保持低级别可能会很好。也就是说,它通常用于桌面开发。

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

UI设计

两者都有ui文件,它们可以与QtDesigner一起使用,从而提供用于设置布局和创建界面的高级视图。 (在Qt Quick中,扩展名是.ui.qml。在Qt窗口小部件中,扩展名是.ui。).ui文件不是强制性的,也不是必需的:您可以选择使用编程方式进行设计和布局QML / JS或C ++ / Python。

学习

如果您完全是编程的新手,建议您先看一下Qt Quick。就我个人而言,我认为Qt Quick具有 gentler 学习曲线,并且更容易与之合作以完成无数项目。由于某种原因,它被称为“ Qt Quick ”。 (不过,不要小看Qt小部件,它们有一些比QtQuick更出色的模块。)

但是,如果您以前使用C ++或Python进行编程,我建议您先看一下Qt窗口小部件,以习惯于它们的signals and slot mechanism和您可能感兴趣的模块(例如{{3} },sqlnetwork)和编程设计(例如,用于显示数据的gui)。

尤其是对于C ++,大多数进行事件处理的非Qt库都使用while循环,而Qt并非如此。他们使用model/view programming

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

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

Qt Quick + Qt小部件

到目前为止,我们一直将它们视为独立的实体。但是可以forum。这使您可以利用Qt Widget,C ++和其他模块。例如,QtQuick提供了TreeView但没有提供TreeModel,可以/应该从C ++将其注册到QML中。通常会有integrate QML into C++音调,Qt建议将程序分为UI和QML和C ++。

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

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

答案 3 :(得分:5)

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

答案 4 :(得分:4)

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

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