属性系统中属性的 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 一起使用?
如何在 Qt 中将 QVariant 转换为 QString,反之亦然?