Qt 反射机制实现,通过类名创建对象

本文介绍了如何在C++中使用Qt的元对象系统实现反射机制,通过类名动态创建对象。首先解释了反射的概念,然后详细阐述了利用qt元对象注册自定义类、自定义类继承QObject并使用Q_INVOKABLE关键字,以及创建类对象的工厂方法。最后通过main函数的测试展示了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

首先说一下什么是反射:

反射是指程序在运行时动态获取对象属性与方法的一种机制,即编译器需要将类型信息(属性类型与偏移地址以及成员函数的地址等信息)编译到程序文件中,当程序运行时将这些信息加载到内存中去,做到运行时只根据对象的地址或引用就可以获取到对象的类型信息,从而利用这些信息达到修改或重建对象的目标。

再简单一点说,就是可以通过类名称来创建一个类对象,这在Java和Object-C中是原生支持的,所以实现起来非常简单,但是C++就不支持了,如果想要用到反射机制,那就得自己实现。

下面我利用qt元对象进行代码实现

利用qt元对象方式的反射机制。
第一,需要注册自定义类。 这里利用 #define RegisterClassFactory(className)
static int className##_id = qRegisterMetaType<className*>(); 宏定义进行。
第二,自定义类必须是继承于QObject基类,并且自定义类构造函数必须加上 Q_INVOKABLE 关键字。
baseclass.h 如下:

#pragma once

#include <QObject>
#include <QDebug>

#define RegisterClassFactory(className) \
static int className##_id = qRegisterMetaType<className*>();

class BaseClass : public QObject
{
   
    Q_OBJECT
public:
    explicit BaseClass(QObject *parent = nullptr);

    virtual void doSomething() {
    qDebug() << "baseclass doing something"; }
protected:
    int m_number;

signals:

};

baseclass.cpp 如下:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九江在天

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值