- 使用Q_INVOKABLE来修饰成员函数,目的在于被修饰的成员函数能够被元对象系统所唤起。
- 除了为对象间的通信提供信号和槽(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());