属性系统中属性的 QVariant(QString, “”) 是啥意思?

Posted

技术标签:

【中文标题】属性系统中属性的 QVariant(QString, “”) 是啥意思?【英文标题】: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 PriorityOne,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您的帖子直接合并相关文本(最好使用复制+粘贴以避免转录错误)。 【参考方案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,“”)是基类的对象名。

【讨论】:

以上是关于属性系统中属性的 QVariant(QString, “”) 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 QVariant::fromValue 与 QString 一起使用?

qstring变量怎样转换为qvariant

如何在 Qt 中将 QVariant 转换为 QString,反之亦然?

将函数返回从“std::vector<QString>”转换为“QVariant”

转载:QByteArray和QVariant

QVariant类