从QMetaProperty类名(Class name from QMetaProperty)

2019-10-20 00:51发布

我的工作让我自己的设计师小部件的外观和功能,如QT。 但现在我需要知道如何创建属性。 我知道我们可以得到使用控件的属性QMetaObjectQMetaProperty但我的问题是,我将能够得到每个属性的类名。 就像对象名称属性来自QObject和geomentry财产来自QWidget 。 是不是这样,我应该硬编码自己的模型或者是有没有办法从物业得到的ClassInfo。 我已经附加其即时试图实现任何响应的图像或相关交理解。

谢谢,

Answer 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包含由他们所属的类名排序的所有属性。



文章来源: Class name from QMetaProperty