本文介绍的是 QT 对象模型那些事,Qt通过结合 C++的速度以及对象模型的适应性达到了图形用户界面编程的目标. 先来看本文内容介绍。

QT 对象模型 那些事是本文要介绍的内容,标准 C++对象模型提供了支持对象 paradigm 的高效运行环境.但是它的静态本质在某些问 题域中适应性不够. 图形用户界面编程既需要运行时效率又需要高度适应性. Qt通过结合 C++的速度以及对象模型的适应性达到了图形用户界面编程的目标.

关于 QT 对象模型那些事(QT元对象)  对象 模型 第1张

Qt 为 C++ 添加了以下特性:

非常强大的,在对象之间进行无缝通信的,称作信号和槽的,机制.

可查询和可设计的对象属性.

强大的事件以及事件过滤.

用于国际化的取决于上下文的字符串翻译.

成熟的内部驱动时钟使得QT能够整合优雅的在一个事件驱动GUI程序中整合多个目标.

以对象所有权这种非常自然方式组织的非常结构化的及可查询的对象树.

安全指针(QPointer)可以在参考对象被销毁后,自动置为0 ,而不像通常的 C++ 指针一样这时会成为悬空指针.

在不同库边界之间动态转换.

这些特征当中的多数使用标准 C++ 技术实现, 基于对 QObject 的继承. 此外,像对象通信机制以及动态属性系统, 需要Qt's 所有的元对象编译器(moc)提供的元对象系统 .

元对象系统是一个使得C++语言更加适合于组件编程扩张.尽管 templates也可以用来对C++进行扩展, 元对象系统提供了标准 C++ 使用 templates 所不能实现的好处; 查看:

Why Doesn't Qt Use Templates for Signals and Slots?

以获取更多信息.

Qt对象: 身份标识 还是 值

以上列出的QT对象模型添加的特征, 需要我们认为 Qt 对象作为一个身份标识,而非值.值可被复制或赋值;而身份标识只能克隆. 克隆意指创建一个新的身份标识,而不是完整复制旧的对象.例 如,双胞胎有不同的身份标识. 它们看起来可能完全一样, 当是有不同得名字, 不同的位置,以及 还可能会有完全不同的社会网络,也就是说克隆身份标识是比复制或者赋值更加复杂的操作.我们可以在QT对象模型中发现这一点.

对于一个 QT 对象:

有***的 QObject::objectName()名字.如果我们复制一个Qt对象,如何命名复制对象?

在对象体系中有一个位置. 如果我们复制一个Qt对象, 该把复制对象放体系中哪个位置?

能够被连接到其他 Qt 对象,以发送信号到其他 Qt 对象或接收其他Qt 对象发送的信号. 如果我们复制一个 Qt 对象, 我们如何处理复制对象的信号-槽连接?

可以在运行时添加在 C++ 中所没有声明的新属性. 如果我们可以复制一个Qt对象, 那麽我们是否需要继承这些动态添加的新属性?

由于以上原因, Qt对象应该被当做身份标识, 而不是作为值. 身份标识是被克隆, 而不是被复制 ,克隆身份标识是比复制或者赋值更加复杂的操作. 因此, QObject及其所有子类(直接或 间接)禁用了它们的复制构造函数和复制操作符号。

小结:QT 对象模型 那些事的内容介绍完了,希望本文对你有所帮助。更多相关内容请参考编辑推荐。

转载请说明出处
知优网 » 关于 QT 对象模型那些事(QT元对象)

发表评论

您需要后才能发表评论