首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性的QVariant(QString,“”)在属性系统中是什么意思?

属性的QVariant(QString,“”)在属性系统中是什么意思?
EN

Stack Overflow用户
提问于 2018-09-20 19:33:55
回答 1查看 105关注 0票数 0

QObject子类有一个返回QMetaObject对象的函数。该函数是metaObject()。我使用这个方法来获取它:

代码语言:javascript
复制
    MyObject *myObject_1=new MyObject;
   const QMetaObject *metaobject=myObject_1->metaObject();

当你使用这段代码时,它会打印类似下面这样的内容。

Object.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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,“”)在属性系统中是什么意思?

查看断点:

EN

回答 1

Stack Overflow用户

发布于 2018-09-20 20:34:24

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

代码语言:javascript
复制
  //                          \/ 
  for(int i=metaobject->propertyOffset();i<metaobject->propertyCount();i++){
       QMetaProperty metaproperty=metaobject->property(i);
       qDebug()<<myObject_1->property(metaproperty.name());
   }

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52424236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档