前言
2018年11月13日下午, Qt公司在上海举办了工业自动化专题的线下研讨会, 本人有幸参加, 与Qt专家面对面交流,受益良多.
本次研讨会Qt公司主要介绍了以下几个部分:
- Qt公司介绍
- Qt在自动化行业的应用展示
- Qt公司的专业服务
- Qt产品的新特性
- Qt性能优化方案
- Toradex:嵌入式解决方案提供商展示
下面我将对个人关注的几个方面进行总结.
Qt产品新特性
- Qt Virtual Keyboard
随着Qt版本的迭代,截止到Qt5.10,QT自带的虚拟键盘支持26国语言. - Qt Charts 可以在后台设置为GPU渲染.
- Qt Quick中的
pointer Handler
可以支持MouseArea透传.即使用pointer Handler
不会出现两个Mouse Area 叠加时只能相应一个的问题. - Qt Quick新增
Shape
元件.与Canvas兼容,但是使用GPU渲染,可以大幅提升程序的性能. - Qt 3D. 支持碰撞检测,类似与一个小的游戏引擎
Qt性能优化方案
- 使用事件驱动
- 避免定时器轮询
- 使用信号槽的形式
- 使用多线程
- 使用C++编写程序逻辑
- 使用
QML WorkerScript
元件. 该元件会开一个独立线程来执行括号内的代码
- 避免使用CPU渲染的元件
- Canvas , Qt Charts (新版本中可以使用
QML Shape
代替Canvas
)
- 使用异步加载
- 对大图片使用异步加载(有bool类型的选项开关)
- 使用C++处理大数据加载
- 使用Qt Quick Compiler (since Qt5.11)
- 只需在Pro文件中添加一行代码
CONFIG += qtquickcompiler
- 使用Qt Creator 的
profiling
性能分析工具, 定位性能瓶颈
QT程序 Fast Boot
在汽车仪表盘等领域, 上电后需要快速的显示启动QT画面. 优化前大约需要30秒左右的时间, 使用Fast Boot技术,可以将QT启动时间缩短到2秒内. 实现该功能需要以下几个方面改进.
- uboot裁剪
- linux内核裁剪
- device tree 裁剪
- 使用静态链接
- Qt裁剪(使用QT Lite工具)
- 使用Qt Quick Compiler, 将QML源码编译成二进制文件.
基于WebGL的浏览器方案
Qt程序支持在服务端运行, 在浏览器中显示. 但是这需要两个条件:
使用QML语言开发
在交叉编译QT时需要选择WebGL插件(库)
因为QT会将页面渲染转换为OpenGL指令流,然后发送到浏览器中运行, 因此只有使用OpenGL渲染的代码(QML代码)才可以在浏览器中运行.
ps: 根据现场展示的demo, 发现对手机浏览器的支持并不好.
- 在服务端显示的内容和手机浏览器显示的存在差异(手机中显示不全),;
- 手机上的触摸事件不会传输到服务端中(在手机上拉动一个slider, 在服务端中没有进行变化), QT工程师解释说该demo只处理了mouseEvent, 而手机上产生的是touchEvent的原因.
总之需要实际测试一下才能知道
Gamma Ray 调试优化工具
Gamma Ray是KDAB公司的一款注入式Runtime调试优化程序.
支持QWidgets/ QML/ Qt3D/ Qt Automotive Suite.
动态监控: 网络, 资源树, UI, 信号槽, GPU负荷, 内存负荷等信息.
Qt公司的专业服务
QT公司的Senior Key 孙女士今天表示, QT公司可以单独提供收费的专业技术服务,即使你使用的是开源版.
服务包括: 性能优化服务, 培训服务, 程序框架适配服务,等