Qt基础---对象模型(Object Model )

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

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

这些Qt功能中的许多功能都基于从QObject继承的标准C ++技术实现。其他对象,例如对象通信机制和动态属性系统,则需要Qt自己的元对象编译器(moc)提供的元对象系统。
元对象系统是C ++扩展,使该语言更适合于真正的组件GUI编程。
重要类
这些类构成了Qt对象模型的基础。

QMetaClassInfo有关类的其他信息
QMetaEnum有关枚举器的元数据

QMetaMethod

有关成员函数的元数据
QMetaProperty有关属性的元数据
QMetaType在元对象系统中管理命名类型

QObject

所有Qt对象的基类
QSignalBlockerQObject :: blockSignals()周围的异常安全包装器
QObjectCleanupHandler观察多个QObject的生命周期
QMetaObject包含有关Qt对象的元信息
QPointer提供指向QObject的受保护指针的模板类
QVariant充当最常见Qt数据类型的并集


Qt对象:特性(identity)与值
上面列出的Qt对象模型的某些附加功能要求我们将Qt对象视为身份(identity),而不是值。值被复制或分配;身份被克隆。克隆意味着创建一个新的身份,而不是旧身份的精确副本。例如,双胞胎具有不同的身份。他们可能看起来完全一样,但是名称不同,位置不同,并且社交网络也可能完全不同。
那么克隆身份比复制或分配值要复杂得多。我们可以在Qt对象模型中看到这意味着什么。
Qt对象...

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

由于这些原因,应将Qt对象视为身份,而不是值。身份是克隆的,而不是复制或分配的,克隆身份比复制或分配值要复杂得多。因此,QObject和QObject的所有子类(直接或间接)都禁用了其复制构造函数和赋值运算符。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道格拉斯范朋克

播种花生牛奶自留田

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值