【发布时间】: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您的帖子直接合并相关文本(最好使用复制+粘贴以避免转录错误)。