Что означает QVariant (QString, «») свойства в Системе свойств? - PullRequest
0 голосов
/ 20 сентября 2018

У подкласса 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 голосов
/ 20 сентября 2018

Вы распечатали свойство из базового класса - QObject.Используйте propertyOffset, чтобы показать только свойства для вашего производного класса:

  //                          \/ 
  for(int i=metaobject->propertyOffset();i<metaobject->propertyCount();i++){
       QMetaProperty metaproperty=metaobject->property(i);
       qDebug()<<myObject_1->property(metaproperty.name());
   }

Это свойство QVariant(QString,“”) является именем объекта базового класса.

...