利用利用 Q_INVOKABLE 和 QMetaObject::newInstance来生成对象的新实例

  1. 使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。
  2. 除了为对象间的通信提供信号和槽(signals and slots)机制之外,元对象的代码还提供下列特性:
  • QObject::metaObject()返回与该类绑定的meta-object对象。
  • QMetaObject::className()可以在运行时以字符串的形式返回类的名字,不需要C++编译器原生的运行时类型信息(RTTI)的支持。
  • QObject::inherits()函数返回继承信息:对象是否是QObject继承树上一个类的实例。
  • QObject::tr()和QObject::trUtf8()提供国际化支持,将字符串翻译成指定的语言。
  • QObject::setProperty()和QObject::property()通过名字动态设置和获取对象属性。
  • QMetaObject::newInstance()构造该类的一个新实例。

有了以上知识,就可以来进行类的创建

//test001.h
#ifndef TEST001_H
#define TEST001_H

#include <QObject>

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

signals:

public slots:

private:

};

#endif // TEST001_H



//test001.cpp
#include "test001.h"

Test001::Test001(QObject *parent) : QObject(parent)
{

}

通过以下代码构造该 Test001 的一个新实例。

Test001* test001 = new Test001(this);
Test001* test002 = qobject_cast<Test001*>(test001->metaObject()->newInstance());

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值