У подкласса 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, «») свойства в Системе свойств?
Просмотр точки останова: