前段时间学习了一下QtQuick的结构体系,初步总结如下:
QtQuick是从Graphics View框架发展而来的,这个框架的核心类有以下几个:
QGraphicsView 继承自QWidget,用于显示QGraphicsScene中的QGraphicsItem对象
QGraphicsScene 用于管理和维护QGraphicsItem
QGraphicsItem Graphics框架显示对象的基类
在处理事件时,QGraphicsView通过QGraphicsScene,把QWidget体系的事件传到QGraphicsItem中,QGraphicsItem的层次化体系和QWidget有几分相似,不过两者应该是不相关的(QWidget有TLW概念,但是QGraphicsItem没有,所以不能独立显示,必须加入到QGraphicsScene中)。
QtQuick(QDeclarative)基于Graphics View框架,实现了一些常用的UI类,并且加入了脚本解析引擎,使UI的组织得更方便。这个体系包括以下几个核心类:
QDeclarativeView 继承自QGraphicsView,用于显示QDeclarative的UI(基于UML的UI)
QDeclarativeItem 继承自QGraphicsItem,所有QtQuick的可视化element的C++实现类都必须继承自这个类
QDeclarativeComponent 用于封装一段UML,提供创建QDeclarativeItem的接口,需要QDeclarativeEngine的支持
QDeclarativeEngine 用于访问和管理QML上下文,为QDeclarativeComponent的实例化提供支持
QDeclarativeContext QML上下文,即QML的运行环境
PS:看reference的时候发现,Qt开发人员基于GraphicsItem实现了两个特别的类QGraphicsProxyWidget和QGraphicsWebView,但是从继承关系上看,这应该是QtQuick以外的东西了,不过这两个提供的都是QtQuick中没有实现的功能,或许有什么方法可以整合到QtQuick的UI中?