【问题标题】:What dos the QVariant(QString, “”) of property mean in The Property System?属性系统中属性的 QVariant(QString, “”) 是什么意思?
【发布时间】:2018-09-20 11:33:54
【问题描述】:

QObject 子类有一个函数,它返回 QMetaObject 的对象。函数是metaObject()。我用这个方法得到它:

    MyObject *myObject_1=new MyObject;
   const QMetaObject *metaobject=myObject_1->metaObject();

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

对象.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;
}

打印结果:

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

对象.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, "")是什么意思?

查看断点:

【问题讨论】:

  • 欢迎来到 Stack Overflow!你的文字图片aren't very helpful。它们不能大声朗读或复制到编辑器中,也不能很好地索引,这意味着有相同问题的其他用户不太可能在这里找到答案。请edit您的帖子直接合并相关文本(最好使用复制+粘贴以避免转录错误)。

标签: c++ qt qt5


【解决方案1】:

您已打印来自基类的属性 - QObject。 使用propertyOffset 仅显示派生类的属性:

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

这个属性QVariant(QString,“”)是基类的对象名。

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2016-06-07
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多