专栏首页Web行业观察Qt widget vs Qt Quick
原创

Qt widget vs Qt Quick

我为什么从web转向qt?

并不是说web语言不好, 我很喜欢web, 从一开始学习html到后来入坑nodejs可以说web领域给我带来了很多的见识同时还payed my bill, 但是w3c定义的html+css的这样一套GUI解决方案实在有很多坑(即使是mdn维护的ecmascript也有很多不尽如人意的地方), 比如浏览器的兼容地狱问题; CSS不够灵活; DOM的臃肿程度等等地方.

QT Quick是另一套解决方案, 利用qml标记语言和ES5(第5版JavaScript)实现GUI, 但是底层语言是C++而不是js, 这一点很重要, 也是Qt和Web的本质区别 !

JavaScript是后于HTML推出了,后来才有了dom,而C++是先于QML推出的, 早就有了qt widget的 gui api 虽然两者都趋于结构与显示分离的架构, 但是核心语言和标记语言的出场顺序还是很说明问题的: QT没有历史包袱,同时qml将结构与样式合并(参考上一篇文章) web确实经典, 但是标记语言本身就应该作为一个GUI框架后出现才最符合一个MVC架构的生态, 这点上qt作为后来者的确有一定的优势!

(Qt4版本是qt gui Application , Qt5之后, gui界面用widgets可以做, 用qml也可以做, 就分开了。故widgets Application 选项 就是qt GUI Application)

Widgets适合传统桌面程序

Qt Quick 是 Qt 4.7 主推的技术 Qt 官网介绍:Qt Quick 是一种高级用户界面技术,使用它可轻松用于移动开发、嵌入式设备使用的动态触摸式界面和轻量级应用程序的开发。在 Qt 5 中,QML 已经不再局限于移动开发,也可用于开发传统的桌面程序。三种全新的技术共同构成了 Qt Quick 用户界面创建工具包:一个改进的 Qt Creator IDE、一种新增的简便易学的语言 (QML) 和一个新加入 Qt 库中名为QtDeclarative 的模块,这些使得 Qt 更加便于不熟悉 C++ 的开发人员和设计人员使用。

  • 相比之下,Qt Widgets 更“老”、更成熟,而 QML/Qt Quick 则更“新”、更“现代”。
  • 无论如何,Qt Widgets 和 QML/Qt Quick 都可以在多个平台上使用(Windows、Linux、OS X…)。

(1)对于传统的桌面程序来说,优先考虑使用 Qt Widgets (2)若要开发更“现代”的 UI 与高级应用,建议使用 Qt5.x + QML 2.x + QtQuick 2.x。 (3)对于移动端开发来说,建议使用 QML,协同 JavaScript,简单快捷、渲染效果更佳、界面更炫酷。不建议使用 Qt Widgets,其显示效果、适应性都不好。

战略性发展

Qt 想用 QML/Qt Quick 一统天下(桌面 + 移动端)。梦想还是要有的,万一实现了呢?

众所周知,Qt 为跨平台而生,而 QML/Qt Quick 作为 Qt 新生力量,完完全全继承了 Qt 包罗万象的特点,它的诞生为 Qt 进军移动领域迈出了历史性的一步。

随着 Qt 的不断迭代,QML/Qt Quick 也可用于开发传统的桌面程序,而且效率越来越高,这样以来,便可以用 QML/Qt Quick 做任何你想做的事情。

QML/QtQuick 作为 Qt 的绝对核心,特别是对于界面要求较高的开发者来说,其作用更为重要。

开发效率的提升

传统上的 native UI 开发普遍使用 C++、C#、Objective-C 等语言。但近年来,本地应用使用 HTML5 + JS 也成为了一种趋势。一方面硬件资源越来越丰富,另一方面 Web 技术让 JS 的解析速度更快。

除此之外,其中一部分功劳要归功于 Google,由于开源了其 NB 的 JS 引擎,Node.js 加上一个前端框架也可以开发本地应用了。例如:Electron - 构建跨平台的桌面应用程序。

QML/Qt Quick 和 Node.js 类似,也提供了一系列 JS 和 C++ 交互的接口,便于 JS 和 C++ 通信。

UI 与逻辑分离

尽管对于大多数情况而言,在编写应用程序时只需 QML 和 JavaScript,但在有些情况下需要计算密集型任务(例如:复杂图像处理、物理引擎),并且将需要处理器竭力提供所有可用性能。

在这些情况下,QML 应用开发适合使用 C++ 来进行扩展,以便在后台执行资源密集型任务,而界面设计和一些简单逻辑(例如:按钮变色、换肤、变形等)都可以在 JS 中完成。这样避免了传统应用开发前端设计和后台逻辑混合的情况,让界面设计者专心设计界面成为了可能。

由于 QML 是在 Qt 上构建的,因此其继承了 Qt 框架中的大部分功能,尤其是信号和槽机制以及元对象系统。使用 C++ 创建的数据可从 QML 直接访问,而 QML 对象也可从 C++ 代码进行访问。

---------------------

总之, Qt Widget作为一套历史的, 经典的GUI解决方案, 就淡忘了它吧, 就像现在JS能从0实现DOM, 但人们还是热衷于手写直观的HTML, QML语言结合了HTML/CSS/JS的共同的优点, 在移动端和嵌入式领域有着无与伦比的竞争力, 值得一学!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Win10如何手动添加开机启动项

    在日常生活中,偶尔要求其中的软件在开机时便能自动启动,比如MySQL一般被设置为自启动项。今天将为大家介绍window10中如何添加开机启动项。

    Jean
  • {防抖}与{节流}

    每次onscroll的时候,先清除掉计时器.如果不清楚,会导致多次触发的时候,其实是把好多次的处理方法放在某个时间点后一起执行。

    Jean
  • 关于计算机图形学与技术美术

    技术美术师经常参与研发的就是三维可视化系统了,这是一个前期以技术研发为主,后期以内容开发为主的大型项目,目前课题处于前期研发阶段,主要包含5个方向:

    Jean
  • QT Creator 快速入门教程 读书笔记(一)

    一 Qt简介 Qt 是一个跨平台的C++应用程序框架,支持Windows、Linux、Mac OS X、Android、iOS、Windows Phone、嵌入...

    用户1198337
  • Qt 5.13版本正式发布(带下载链接)

    今天,我们发布了 Qt 5.13,我为每个人都投入的所有工作感到自豪。与往常一样,我们的版本带有新功能,更新,错误修复和改进。对于Qt 5.13,我...

    Qt君
  • C++最好的图形库是什么?

    世界上的GUI库多如牛毛,有的开源,有的收费,有的可以做手机app开发,有的可以做桌面应用,有的只能用在某个系统,有的支持跨平台。基于不同的编程语言,人们又开发...

    Coding十日谈
  • 基于NXP i.MX28 MPU的疫情监控平台2-Qt环境搭建

    Qt 是一个跨平台的应用程序开发框架。使用Qt开发的应用程序,只需要编写一套代码,然后把这套代码放在不同平台的Qt环境去编译,就会生成可以运行在对应平台的应用程...

    单片机点灯小能手
  • Qt介绍及环境搭建

    Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt Softwar...

    DeROy
  • Qt官方示例-Quick Control.1样式

    Qt君
  • PyQt中WindowFlags使用详解

    通过 setWindowFlags来设置窗口的 WIndowFlags,多个 WindowFlags之间用 | 连接,如:

    渔父歌

扫码关注云+社区

领取腾讯云代金券