一、元对象系统的概念:
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();
}
四、调用成员函数:
省略