Qt如何从QObject返回Q_PROPERTY的子集

时间:2018-07-05 10:39:05

标签: c++ qt c++11 properties

我想从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. 返回属性列表?

关于(1)我的解决方案似乎并不十分健壮和面向对象。

关于(2)也许有了lambda,我可以更好/更快地达到目标?

0 个答案:

没有答案