标准的C ++对象模型为对象范例提供了非常有效的运行时支持。但是它的静态性质在某些问题领域是不灵活的。图形用户界面编程是一个既需要运行时效率又需要高度灵活性的领域。 Qt通过结合C ++的速度和Qt对象模型的灵活性来提供此功能。
Qt将这些功能添加到C ++中:
这些Qt功能中的许多功能都基于从QObject继承的标准C ++技术实现。其他对象,例如对象通信机制和动态属性系统,则需要Qt自己的元对象编译器(moc)提供的元对象系统。
元对象系统是C ++扩展,使该语言更适合于真正的组件GUI编程。
重要类
这些类构成了Qt对象模型的基础。
QMetaClassInfo | 有关类的其他信息 |
QMetaEnum | 有关枚举器的元数据 |
QMetaMethod |
有关成员函数的元数据 |
QMetaProperty | 有关属性的元数据 |
QMetaType | 在元对象系统中管理命名类型 |
QObject |
所有Qt对象的基类 |
QSignalBlocker | QObject :: blockSignals()周围的异常安全包装器 |
QObjectCleanupHandler | 观察多个QObject的生命周期 |
QMetaObject | 包含有关Qt对象的元信息 |
QPointer | 提供指向QObject的受保护指针的模板类 |
QVariant | 充当最常见Qt数据类型的并集 |
Qt对象:特性(identity)与值
上面列出的Qt对象模型的某些附加功能要求我们将Qt对象视为身份(identity),而不是值。值被复制或分配;身份被克隆。克隆意味着创建一个新的身份,而不是旧身份的精确副本。例如,双胞胎具有不同的身份。他们可能看起来完全一样,但是名称不同,位置不同,并且社交网络也可能完全不同。
那么克隆身份比复制或分配值要复杂得多。我们可以在Qt对象模型中看到这意味着什么。
Qt对象...
由于这些原因,应将Qt对象视为身份,而不是值。身份是克隆的,而不是复制或分配的,克隆身份比复制或分配值要复杂得多。因此,QObject和QObject的所有子类(直接或间接)都禁用了其复制构造函数和赋值运算符。