从表单的小部件中收集值

时间:2015-12-17 14:25:39

标签: c++ qt data-structures qt4 qt5

鉴于以下内容:

struct Property {
  QWidget *label;
  QWidget *field;
};
QList<Property*> properties;

其中大多数fieldQLineEdit,但有些是QTimeEdit,可能是其他类型,例如QDateEdit

用于(方便地)以这种方式制作表格:

for(int i = 0; i != properties.size(); i++)
    formLayout->addRow( properties.at(i)->label,properties.at(i)->field );

我正在考虑以同样的方式从表单field中收集值:

foreach (const Property *p, properties) 
    p->field->value()

问题是没有这样的value()功能。

这个设计好吗?应该采用哪种方法来实现value()

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。

  1. 一种丑陋的方法是使用p->metaObject()->className()方法。
  2. 更好的方法是对所有可能的类型使用qobject_cast<Class*>(p)。非NULL的那个是正确的类型。
  3. 您可以使用p->inherits("CLASS")来请求继承。