Qt 核心功能(02):对象模型【官翻】

对象模型

标准的C++对象模型为对象范例提供了非常有效的运行时支持。但是它的静态性质在某些问题领域是不灵活的。图形用户界面编程是一个既需要运行时效率又需要高度灵活性的领域。 Qt通过结合C ++的速度和Qt对象模型的灵活性来提供此功能。

Qt将这些功能添加到C ++中:

  • 一种非常强大的无缝对象通信机制,称为信号和槽
  • 可查询和可设计的对象属性
  • 强大的事件事件过滤器
  • 上下文的字符串国际化的翻译
  • 复杂的间隔驱动计时器,使许多任务可以优雅地集成到事件驱动的GUI中
  • 分层且可查询的对象树,以自然方式组织对象所有权
  • 当引用对象被销毁时,自动指针设置为0,与普通C++指针不同,当指针被销毁时,指针变成悬挂指针。
  • 跨越库边界的动态强制转换
  • 支持自定义类型创建。

些QT特性中的许多都是基于QObject继承的标准C++技术实现的。其他的,如对象通信机制动态属性系统,需要由Qt自己的元对象编译器(moc)提供的元对象系统

元对象系统是一个C++扩展,使语言更适合于真正的组件GUI编程。

重要的类

以下这些类构成了Qt对象模型的基础。

类名简介
QMetaClassInfo关于类的附加信息
QMetaEnum关于枚举器的元数据
QMetaMethod关于成员函数的元数据
QMetaObject包含有关Qt对象的元信息
QMetaProperty关于属性的元数据
QMetaType管理元对象系统中的命名类型
QObject所有Qt对象的基类
QObjectCleanupHandler监视多个qObject的生存期
QPointer提供指向类的QoPointerObject
QSignalBlockerQObject::blockSignals() 的异常安全包装
QSignalMapper捆绑来自可识别发送者的信号
QVariant就像是最常见的Qt数据类型的联合

Qt对象:标识与值

面列出的Qt对象模型的一些附加特性要求我们将Qt对象看作标识,而不是值。复制或分配值;克隆标识。克隆意味着创造一个新的身份,而不是旧身份的完全复制。例如,双胞胎有不同的身份。他们可能看起来一模一样,但他们有不同的名字,不同的地点,可能有完全不同的社交网络。

么克隆身份比复制或赋值更复杂。我们可以在Qt对象模型中看到这意味着什么。

一个 Qt 对象…

  • 可能具有唯一的QObject::objectName() 。如果我们复制一个Qt对象,我们应该给这个拷贝取什么名字?
  • 在对象层次结构中具有位置。如果我们复制一个Qt对象,那么该副本应该位于哪里?
  • 可以连接到其他Qt对象以向它们发出信号或接收它们发出的信号。如果我们复制一个Qt对象,我们应该如何将这些连接转移到副本?
  • 可以在运行时添加新属性,这些属性在C++类中没有声明。如果我们复制一个Qt对象,那么这个拷贝是否应该包括添加到原始对象的属性?

由于这些原因,Qt对象应该被视为标识,而不是值。标识是克隆的,而不是复制或分配的,克隆标识是比复制或分配值更复杂的操作。因此,QObject和QObject的所有子类(直接或间接)都禁用了它们的复制构造函数和赋值运算符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值