在财产体系中,财产的QVariant(QString,“”)是什么意思?

时间:2018-09-20 11:33:55

标签: c++ qt qt5

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;
}

打印结果:

enter image description here

使用此代码时,它将打印出类似这样的内容。

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;
}

打印结果

enter image description here

问题是为什么myObject_1具有QVariant(QString,“”)属性? 属性的QVariant(QString,“”)在“属性系统”中是什么意思?

查看断点:

enter image description here

1 个答案:

答案 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,“”)是基类的对象名称。