我想从QObject类中提取定义的属性的特定子集。
这是我的解决方案:
用特定的前缀命名属性的子集,例如“ param”
class MyObject: public QObject
{
Q_OBJECT
Q_PROPERTY(double paramX READ paramX WRITE setParamX NOTIFY paramXChanged)
Q_PROPERTY(double paramY READ paramY WRITE setParamY NOTIFY paramYChanged)
Q_PROPERTY(double paramZ READ paramZ WRITE setParamZ NOTIFY paramZChanged)
// declaration etc...
};
返回对象的参数名称:
MyObject* obj = new MyObject();
const QMetaObject* meta = obj->metaObject();
QVector<QMetaProperty> list;
for(int i=0; i<meta->propertyCount(); ++i)
{
QMetaProperty property = meta->property(i);
QString name(property.name());
if(name.startsWith("param"))
{
list.append(property);
}
}
与
for(auto& e : list){
qDebug() << e.name();
}
参数正确打印。
但是我并不真正认为这是一种好方法,有更好的方法
关于(1)我的解决方案似乎并不十分健壮和面向对象。
关于(2)也许有了lambda,我可以更好/更快地达到目标?