我正在制作自己的设计器小部件,其外观和功能都类似于 qt。但现在我需要知道该属性是如何创建的。我知道我们可以使用获取小部件的属性,QMetaObject
但QMetaProperty
我的问题是我能否获取每个属性的类名。就像对象名称属性来自QObject
和几何属性来自QWidget
。是这样我应该硬编码自己建模还是有办法从属性中获取classInfo。我已附上我试图实现任何响应或相关帖子的图像。
谢谢,
我正在制作自己的设计器小部件,其外观和功能都类似于 qt。但现在我需要知道该属性是如何创建的。我知道我们可以使用获取小部件的属性,QMetaObject
但QMetaProperty
我的问题是我能否获取每个属性的类名。就像对象名称属性来自QObject
和几何属性来自QWidget
。是这样我应该硬编码自己建模还是有办法从属性中获取classInfo。我已附上我试图实现任何响应或相关帖子的图像。
谢谢,
为了在类及其属性之间创建映射,您需要遍历对象的类层次结构。以下是创建此类映射的示例代码:
// 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
包含按它们所属的类名排序的所有属性。