QWidget如何平滑过渡到Qt Quick

Qt Quick优势
1.在以往项目的开发过程中,对于PC端 UI的需求,我们使用QWidget完全能够在主流桌面操作系统上实现跨平台的开发工作;但是当遇到可触碰交互的用户界面,并要求在除了主流桌面操作系统,在移动操作系统上也要实现可观的产品时,Qt Quick的适配性更好
2.同时使用C++与Qt标记性语言QML,如果你已经熟悉了这套开发流程,你会发现这种相较于原有QWidget的开发,这种开发对View模块的隔离更加彻底,后端应用逻辑使用C++,QML开发用户界面,并有MVD模式可以使用,大大提高开发效率
3.Qt Quick默认使用OpenGL ES,渲染效率很高,并且提供了属性动画等基本动画对象以及用于组合多个动画对象的分组动画对象,在实现有关动画方面的需求,会更加方便

在原有QWiget项目中嵌入Qt Quick
如果当前的需求仅仅是要开发一个新的产品或者一个全新的模块,建议直接选择Qt Quick;但是在实际的业务场景里,我们往往会遇到,由于QWidget完成的项目业务积累足够庞大,导致部分需求的开发使用Quick开发成本过高,所以下面我会根据实际的业务开发场景给出两个技术方案供选择。
方案1.业务不是很独立,是原有业务的一部分,并且依赖QWidget的组件,以及QWidget的属性,使用QQuickWidget

了解QQuickWidget,打开Qt帮助文档通过索引搜索QQuickWidget,会看到非常详细的官方解释:The QQuickWidget class provides a widget for displaying a Qt Quick user interface。也就是说我们在能够兼容所有的QWidget属性以及与原有QWidget组件进行无差别衔接的同时,可以使用QML进行界面的编写。但是一定要打开更多来观看更详细的Detailed Description,因为这里会有几个关键Note,告诉我们对原有QWidget业务进行无缝衔接的同时,使用QML要付出的代价。

Note1:QQuickWidget的灵活,是以牺牲性能为代价的。与QQuickWindow和QQuickView不同,QQuickWidget涉及渲染到render到OOpenGL帧缓冲区对象,这个会带来轻微的性能损失(这里可以埋个坑,后续一起讨论QQuick的渲染机制)
Note2:QQuickWidget将禁用所有平台上的线程render loop,例如Animator类和vsync驱动的动画不能使用
Note3:避免在QQuickWidget上调用winId()。这个函数会触发本机窗口的创建,导致性能降低,并可能出现渲染问题。
所以在使用QQuickWidget的灵活性的同时,要谨记以上三个Note

方案2.全新的项目或者非常独立的业务,使用QQuickView,将会使用原汁原味的QML与C++进行混合开发
了解QQuickView,同样打开Qt帮助文档通过索引搜索QQuickWidget(无论了解什么,先去Qt帮助文档查询)The QQuickView class provides a window for displaying a Qt Quick user interface.点击更多查看详细信息。QQuickView是QQuickWindow的派生类,当给定主源文件的URL时候,会自动加载显示QML场景。

总结:无论是QQuickWidget还是QQuickVIew,在编码过程中的使用大同小异,通过代码编写发现问题,解决问题。

参考资料
【1】QmlBook-In-Chinese 第二章 Get Start
【2】Qt Quick核心编程 第一章 Qt Quick 概览
【3】Qt Quick核心编程 第四章 Qt Quick 入门
【4】Qt Assistant QQuickWidget,QQuickView

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一二三o-0-O

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值