美文网首页Qt QML 杂记
Qt 元对象系统【文摘】

Qt 元对象系统【文摘】

作者: 赵者也 | 来源:发表于2017-11-12 22:07 被阅读12次

Qt 的元对象系统

Qt 的主要成就之一就是使用了一种机制对 C++ 进行了扩展,并且使用这种机制创建了独立的软件组件。这些组件可以绑定在一起,但任何一个组件对于它所要连接的组件的情况事先都一无所知。

这种机制称为元对象系统(meta-objectsystem),它提供了关键的两项技术:信号-槽以及内省(introspection)。内省功能对于实现信号和槽是必需的,并且允许应用程序的开发人员在运行时获得有关 QObject 子类的“元信息”(meta-information),包括一个含有对象的类名以及它所支持的信号和槽的列表。这一机制也支持属性(广泛用于 Qt 设计师中)和文本翻译(用于国际化),并且它也为 QtScript 模块奠定了基础。

标准 C++ 没有对 Qt 的元对象系统所需要的动态元信息提供支持。Qt 通过提供一个独立的 moc 工具解决了这个问题,moc 解析 Q_OBJECT 类的定义并且通过 C++ 函数来提供使用的信息。由于 moc 使用纯 C++ 来实现它的所有功能,所以 Qt 的源对象系统可以在任意 C++ 编译器上工作。

这一机制是这样工作的:
<1> Q_OBJECT 宏声明了在每一个 QObject 子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall(),以及其他一些函数。
<2> Qt 的 moc 工具生成了用于由 Q_OBJECT 声明的所有函数和所有信号的实现。
<3> 像 connect() 和 disconnect() 这样的 QObject 的成员函数使用这些内省函数来完成它们的工作。

由于所有这些工作都是由 qmake、moc 和 QObject 自动处理的,所以很少需要去考虑这些事情。但是,你可以通过阅读 QMetaObject 类 的文档来了解更多内容。

相关文章

  • Qt 元对象系统【文摘】

    Qt 的元对象系统 Qt 的主要成就之一就是使用了一种机制对 C++ 进行了扩展,并且使用这种机制创建了独立的软件...

  • Qt:The Meta-Object System

    翻译自:The Meta-Object System 本文是 Qt 的元对象系统和自省功能(introspecti...

  • QT类库概述(003)

    *Qt核心特点 元对象系统由三个基础组成:1.QObject类是所有使用元对象系统的类的基类2.在一个类的priv...

  • QT实现反射

    前言 如何通过类名动态的创建对象(类反射),对于Java开发者来说一点也不陌生,当然Qt也提供了一个元对象系统(T...

  • QT QObject分析

    QT QObject分析 看了上面大佬写的东西,自己也总结一下吧,元对象系统中实现了很多功能,有信号槽机制,将信号...

  • Day04

    Qt对象模型 信号和槽、对象属性系统、事件和事件过滤器、国际化翻译机制、定时器驱动、守卫指针(QPoint)、动态...

  • Perl 6 中的元对象协议

    自省和 Perl 6 的对象系统 Perl 6 是构建在元对象层上面的。那意味着有些对象(元对象)控制着各种面向对...

  • QObject类

    徐红伟@百香果科技 QObject类是所有Qt对象的基类。是Qt对象模型的基础。 Signals和Slots机制 ...

  • 使用CMake构建Qt程序

    尽量不要使用sudo apt-get install方式安装Qt Ubuntu系统中默认安装了Qt,这样安装的Qt...

  • 享元模式

    享元模式的意图是复用对象,节省内存,前提是享元对象是不可变对象。 当一个系统中存在大量重复对象的时候,如果这些重复...

网友评论

    本文标题:Qt 元对象系统【文摘】

    本文链接:https://www.haomeiwen.com/subject/ppgomxtx.html