Qt:如何清除表单的字段?

问题描述:

我有一些形式fiels,连击等。我想通过表单上的所有部件走了过来,并举例来说,如果它的文本框,将其清除,这样的事情:Qt:如何清除表单的字段?

foreach(QObject *child, this->ui->children()) 
{ 
    QLineEdit *txtField = qobject_cast<QLineEdit *>(child); 
    if (txtField) 
    { 
     txtField->clear(); 
    } 
} 

问题是UI对象没有像儿童这样的属性,我不知道如何获得儿童小部件的整个集合。

也许表单对象有类似Clear方法。这将是最好的。

感谢

试试吧。

foreach(QLineEdit *widget, this->findChildren<QLineEdit*>()) { 
    widget->clear(); 
} 
+0

是的,它为我工作,谢谢!但我不得不删除setupUi代码,因为表单里面有一些奇怪的附加小部件。我想我不需要它,因为此方法之前被调用过。 – mimic 2010-10-05 05:32:59

+0

'setupUi'代码不应该在那里......初始化后清除表单并没有多大意义 - 并且多次调用setupUi可能导致内存泄漏。 – 2015-12-17 15:34:16

+0

@TomášZato我同意。我不知道为什么我把它放在那里。也许可以告诉它需要在某个地方被调用。 – wrongite 2015-12-17 18:28:37

多少QLineEdit s的,我们在谈论什么?除非有一个很好的理由,我只想用手工添加一个方法到具有ui作为成员的类并做到这一点,就像这样:

void clearform() 
{ 
    this->ui->firstlineedit->clear(); 
    this->ui->secondlineedit->clear(); 
    ... 
    this->ui->nthlineedit->clear(); 
} 

一个很好的理由,你为什么不能做这种方式是, QLineEdit s是动态添加的,您没有它们作为成员。在这种情况下,您可以在小部件上致电QObject::children,小部件是所有QLineEdit的父项,如果它们共用一些通用名称,则QObject::findChildren也可以使用。