QT元对象系统

Qt的元对象系统

元对象系统功能:

  1. 对象间的信号和槽机制。
  2. 运行时类型信息和动态属性系统。

使用元对象需要满足的条件

  1. 必须继承自QOBJECT

  2. 在类声明区域添加Q_OBJECT宏。用于启动原对象特性。

  3. 元对象编译器(MOC)为每个Qobject的子类,提供实现元对象特性所必须的代码。

元对象的反射机制

  1. 反射机制指的是在运行时,能获取任意一个对象的所有类型、属性和成员函数等信息的一种机制。

  2. QT中使用一系列类来实现反射机制。其中QMetaObject类描述了QObject及其派生类的所有元信息。因此QMetaObject类的对象是QT中的元对象。

  3. 比如成员函数使用QMetaMethod进行描述。

    QMetaMethod  qm = metaObject->method(1); //获取索引为 1 的成员函数
    

使用反射机制的条件

  1. 需要继承自QObject 并且在类中加入Q_OBJECT宏

  2. 如果希望普通函数能够被反射,需要在函数声明之前添加QObject::Q_INVOKABLE宏

    Q_INVOKABLE A(){} //要想函数被反射,需要指定 Q_INVOKABLE 宏。
    
  3. 如果希望成员变量能够被反射,需要使用Q_PROPERTY宏定义

使用反射机制获取类对象的常用成员函数

  1. QMetaMethon 类

    函数功能
    QByteArray methodSignature() const;返回函数签名
    MethodType methodType() const;返回函数类型(信号 槽 成员函数 构造函数)
    QByteArray name() const;函数名称
    int parameterCount() const ;返回参数个数
    QList parameterNames() const;返回参数名称列表
    int parameterType(int index) const;返回指定索引参数类型
    QList parameterTypes() const;返回参数类型列表
    int returnType() const;返回值的类型
    const char * typeName() const;返回值类型的名称
    Access access() const;返回函数的访问级别
  2. QMetaObject类

    函数功能
    int indexOfMethod(const char* f) const;返回函数的索引
    int indexOfSignal(const char * s) const;返回信号的索引
    int indexOfConstructor(const char *c) const;构造函数的索引
    int constructorCount() const ;返回构造函数的数量
    QMetaMethod constructor(int i)const;返回指定构造函数的的元数据
    int methodCount() const;返回函数的数量
    QMetaMethod method(int i) const;返回指定索引i的元数据
    const char* className() const;返回类的名称
    const QMetaObject* superClass() const;返回父对象的元数据
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值