我有一些形式有fiels,combos等。我想通过表单上的所有小部件,如果它是文本字段,清除它,类似的东西:
foreach(QObject *child, this->ui->children())
{
QLineEdit *txtField = qobject_cast<QLineEdit *>(child);
if (txtField)
{
txtField->clear();
}
}
问题是ui对象没有像孩子这样的属性,我不知道如何获得整个子窗口小部件的集合。
表格对象可能有Clear方法。这将是最好的。
由于
答案 0 :(得分:5)
试试吧。
foreach(QLineEdit *widget, this->findChildren<QLineEdit*>()) {
widget->clear();
}
答案 1 :(得分:2)
我们谈论了多少QLineEdit
个?除非有充分的理由,否则我只需将一个方法添加到具有ui
成员的类中,并手动执行,如下所示:
void clearform()
{
this->ui->firstlineedit->clear();
this->ui->secondlineedit->clear();
...
this->ui->nthlineedit->clear();
}
你不能这样做的一个很好的理由是QLineEdit
是动态添加的,你没有它们作为成员。在这种情况下,您可以在作为所有QLineEdit
的父级的小部件上调用QObject::children,如果他们共享一些通用名称,QObject::findChildren也可以使用。