Qt的元对象系统

一、元对象系统的概念:

1.用来记录类的原始信息的对象称之为元对象。

2.对于继承于QObject,且包含Q_OBJECT宏的类,当它创建对象时,Qt会自动为该类创建一个元对象。

3.metaObject方法可以获取元对象。

二、获取类的基本信息:

有一个按钮,在单击时调用doCommon()方法。

void Widget::on_pushButton_clicked()
{
    //获取基本信息
    doCommon(*ui->pushButton->metaObject());
}

1.获取类名:const char *QMetaObject::className() const

void Widget::doCommon(const QMetaObject &obj)
{
    //获取名字
    qDebug()<<obj.className();
}

2.获取继承关系: bool QMetaObject::inherits(const QMetaObject *metaObject) const

void Widget::doCommon(const QMetaObject &obj)
{
    //获取继承关系
    qDebug()<<obj.inherits(&QWidget::staticMetaObject);
}

3.获取数据成员: QMetaProperty QMetaObject::property(int index) const

void Widget::doCommon(const QMetaObject &obj)
{
    
    //获取第一个数据成员的类型
    qDebug()<<obj.property(0).typeName();
}

三、创建对象:

1.使用newInstance()方法。

2.使用Q_INVOKABLE修饰构造函数

//修饰构造函数
class MyObject : public QObject {
    Q_OBJECT

public:
    Q_INVOKABLE MyObject(int value) {
        qDebug() << "MyObject constructed with value:" << value;
    }
};

//创建对象
int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);

    const QMetaObject* metaObject = MyObject::staticMetaObject;

    QObject* instance = metaObject->newInstance();
    if (instance) {
        qDebug() << "Instance created successfully!";
    } else {
        qDebug() << "Failed to create instance!";
    }

    delete instance;
    return a.exec();
}

四、调用成员函数:

省略

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值