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_HMain.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_HMain.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,“”)在属性系统中是什么意思?
查看断点:

发布于 2018-09-20 20:34:24
您已经打印了基类- QObject中的属性。使用propertyOffset仅显示派生类的属性:
// \/
for(int i=metaobject->propertyOffset();i<metaobject->propertyCount();i++){
QMetaProperty metaproperty=metaobject->property(i);
qDebug()<<myObject_1->property(metaproperty.name());
}此属性QVariant(QString,“”)是基类的对象名称。
https://stackoverflow.com/questions/52424236
复制相似问题