深度解析QML的实现原理
来源:互联网 发布:淘宝聚划算是什么区别 编辑:程序博客网 时间:2024/04/29 10:59
深度解析QML的实现原理
Delete instructional text in italic
This article explains how to ... Replace the abstract text with a short paragraph (or sentence) describing what the topic covers.
Enter article metadata as described below. Note that this template can be placed anywhere in the article. Do not remove parameters that you do not use
Introduction
本文研究QML的实现原理,探讨QML和Qt的Graphics System ,以及OpenGL的关系。关于QML和C++的交互机制参考QML与Qt C++ 交互机制探讨与总结.
内容
以以下简单代码为例:
在上述代码中用到了QML的Rectangle、Image、Text 这些Element,当我们运行这段qml代码时,QDeclarativeEngine开始根据解析方法(parser)解析这些元素,经过解析发现这些元素对应的C++类分别是QDeclarativeRectangle,QDeclarativeImage,QDeclarativeText,而这几个C++类的父类都是QDeclarativeItem,QDeclarativeItem的继承了QGraphicObject,QGraphicObject继承自QObject和QGraphicsItem, 走到这里的时候我们就看到了熟悉的QGraphicItem,我们知道它由是QGraphicsScene来管理,QGraphicsView来呈现的,而追本溯源,QGrapphicsView是QWidget的子类,QPainter来画出屏幕上每个像素的内容。
那么QPainter在画出每个像素内容的方式就会取决于我们的硬件,可能是Raster、OpenGL,OpenVG等等,当我们实现OpenGL时,会有GPU进行图形加速处理,这里所有要显示的数据都将从Frame Buffer读取。所以当我们在应用中使用大量的大容量的图片时,应用的响应速度会变慢。但这并不能说明QML语言是不可取的,相反,我们推荐用QML实现UI。
优化QML
根据QML的实现原理,我们就能找到优化运行速度的方法。
1,使用Loader动态加载
2,避免使用大量的大容量图片
3,用Opacity或者visible属性
当我们的应用充满了许多的模块时,大部分模块并不是程序加载时就需要显示出来的,如果我们一次加载就会将所有数据都读入Frame Buffer中,这使得运行速度变慢,而用Loader动态加载,在需要时再将模块读入Buffer。同时,我们在应用程序设计之初就尽量避免使用大量的大容量图片。而使用Opacity=0会使不显示的内容不被加载到buffer中。而在开发中是使用Loader或是OPacity等属性更有效,取决于应用的实际情况。
相关链接
- Qt Quick (Chinese)
- QML与Qt C++ 交互机制探讨与总结
Add categories below. Remove Category:Draft when the page is complete or near complete
- 深度解析QML的实现原理
- 深度链接、延迟深度链接、App Links以及关于LinkedME实现深度链接的原理解析
- C++ *深度解析*【函数重载】的实现原理
- 深度解析AbstractQueuedSynchronizer实现原理(下)
- Volley<二> 实现原理深度解析
- 深度解析AbstractQueuedSynchronizer实现原理(上)
- 从系统和代码实现角度解析TensorFlow的内部实现原理 | 深度
- 深度解析搜索引擎的原理结构
- 深度解析LSTM神经网络的设计原理
- 绝对深度解析volatile关键字的实现原理(大部分内容整理于其他博客)
- HashMap深度原理解析
- 深度解析HTTPS原理
- 深度解析HTTPS原理
- HashMap深度原理解析
- 深度解析SpringMvc实现原理手写SpringMvc框架
- 深度解析SpringMvc实现原理手写SpringMvc框架
- Android消息机制—— Handler实现原理深度解析
- QML中ListView的深度订制,并利用其实现自定义ComboBox和TreeView
- QML入门必备基础知识之
- Struts2 中的defaultAction
- Caused by: java.util.zip.DataFormatException: incorrect data check
- (这篇文章我决定至少看十遍以上)十天内掌握线性代数:惊人的超速学习实验
- 优秀程序员必看书籍
- 深度解析QML的实现原理
- Sql cookbook学习笔记
- linux脚本----trap
- linux C 遍历目录及其子目录
- session的机制
- ecos(redboot)移植剖析
- 上传 Fileupload 的那些小事(图片,txt文字,文件...)实例
- OOPS解读比较好的一篇文章 留个备份
- 基于jquery的下拉列表实现