Qt文档阅读笔记-Object Model初步解析

对象模型

标准C++对象模型提供了对象范式在运行时的高效性。但是他的一些静态性质在某些领域是不灵活的。在GUI程序中不仅要运行时的高效还需要较高的灵活性。Qt对象模型不急结合了C++运行时的高效并且还相当的灵活。

Qt在C++的基础上海增加了如下特征:

1. 一个强大的机制使得各个对象之间无缝交流:信号和槽;

2. 可查询及可被识别:对象属性;

3. 强有效的事件及事件过滤;

4. 国际化上下文字符串翻译;

5. 复杂的驱动计时器,在以事件为驱动的GUI中进行优雅的调用;

6. 对象树:使得各个对象都有所属;

7. 自定义类型的创建

上述的有些特征是通过在标准C++上继承得到的,如QObject。信号与槽,属性系统是由元对象系统提供的,也就是Qt自己的Meta-Object Compiler。

元对象系统是C++的扩展【这里要注意官方对元对象系统用的词是extension,而国际化上下文等用的是implement】的,这样特性更好的构成了GUI编程。

 

下面的类都是Qt的对象模型:

QMetaClassInfo关于类的附加信息
QMetaEnum关于枚举器的元数据
QMetaMethod关于成员函数的元数据
QMetaProperty关于属性的元数据
QMetaType管理元对象系统的命名类型
QObject所有Qt对象的基类
QSignalBlocker对安全异常的封装与QObject::blockSignals()一样
QObjectCleanupHandler监控多个QObject的运行周期
QMetaObject包含关于Qt对象的元信息
QPointer提供指向QObject的受保护模板类
QSingalMapper绑定可以被识别的发送方的信号
QVariant最常见的Qt数据类型的结合体

 

Qt Objects:身份与值

身份是包含一些特征的。比如双胞胎,虽然他们看起来很像(值一样),但有不同的身份。

克隆身份是比复制以及赋值更为复杂的。

如何理解上面克隆身份,比如:

克隆身份要考虑QObject::objectName()是否唯一。

object层次结构上,克隆的QtObject在object层次结构上该如何保证。

在运行时向某个对象加了个特别的属性,克隆时是否也需要保证。

所以Qt对象都是一种标识,而不是一个值。所以QObject的类或子类都禁止其拷贝和赋值操作。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页