来自QMetaProperty的班级名称

时间:2014-04-29 08:18:14

标签: c++ qt qmetaobject

我正在制作我自己的设计小部件,其外观和功能类似于qt。但现在我需要知道如何创建属性。我知道我们可以使用QMetaObjectQMetaProperty获取小部件的属性,但我的问题是我能够获取每个属性的类名。对象名称属性来自QObject,geomentry属性来自QWidget。是这样我应该硬编码自己建模或有没有办法从属性获取classInfo。我已经附上了我试图获得任何回复或相关帖子的图片。

感谢, enter image description here

1 个答案:

答案 0 :(得分:1)

为了在类及其属性之间创建映射,您需要遍历对象的类层次结构。以下是包含此类映射的示例代码:

// Create properties per class mapping for the initialObject.
const QMetaObject *mo = initialObject->metaObject();
QMap<QString, QStringList> propertyMap;
do {
    QStringList properties;
    for(int i = mo->propertyOffset(); i < mo->propertyCount(); ++i) {
        properties << QString::fromLatin1(mo->property(i).name());
    }
    propertyMap[mo->className()] = properties;

} while (mo = mo->superClass());

现在propertyMap包含按其所属的类名排序的所有属性。