QObject子类具有一个函数,可以返回QMetaObject的对象。该函数是metaObject()。我使用这种方法来获取它:
MyObject *myObject_1=new MyObject;
const QMetaObject *metaobject=myObject_1->metaObject();
使用此代码时,它将打印出类似这样的内容。
Object.h
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
class MyObject:public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent=0):QObject(parent){
}
};
#endif // MYOBJECT_H
Main.cpp
#include "myobject.h"
#include <QApplication>
#include <QMetaObject>
#include <QMetaProperty>
#include <QDebug>
int main(int argc, char *argv[])
{
MyObject *myObject_1=new MyObject;
const QMetaObject *metaobject=myObject_1->metaObject();
for(int i=0;i<metaobject->propertyCount();i++){
QMetaProperty metaproperty=metaobject->property(i);
qDebug()<<myObject_1->property(metaproperty.name());
}
return 0;
}
打印结果:
使用此代码时,它将打印出类似这样的内容。
Object.h
#ifndef MYOBJECT_H
#define MYOBJECT_H
#include <QObject>
class MyObject:public QObject
{
Q_OBJECT
Q_PROPERTY(Priority priority READ priority WRITE setPriority)
public:
enum Priority{One,Two,Three};
Q_ENUM(Priority)
MyObject(QObject *parent=0):QObject(parent){
}
void setPriority(Priority priority){
m_priority=priority;
}
Priority priority()const{
return m_priority;
}
private:
Priority m_priority;
};
#endif // MYOBJECT_H
Main.cpp
#include "myobject.h"
#include <QApplication>
#include <QMetaObject>
#include <QMetaProperty>
#include <QDebug>
int main(int argc, char *argv[])
{
MyObject *myObject_1=new MyObject;
myObject_1->setProperty("priority","Two");
const QMetaObject *metaobject=myObject_1->metaObject();
for(int i=0;i<metaobject->propertyCount();i++){
QMetaProperty metaproperty=metaobject->property(i);
qDebug()<<myObject_1->property(metaproperty.name());
}
return 0;
}
打印结果
问题是为什么myObject_1具有QVariant(QString,“”)属性? 属性的QVariant(QString,“”)在“属性系统”中是什么意思?
查看断点:
答案 0 :(得分:2)
您已经从基类-QObject
中打印了该属性。
使用propertyOffset
仅显示派生类的属性:
// \/
for(int i=metaobject->propertyOffset();i<metaobject->propertyCount();i++){
QMetaProperty metaproperty=metaobject->property(i);
qDebug()<<myObject_1->property(metaproperty.name());
}
此属性QVariant(QString,“”)
是基类的对象名称。