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