Qt: как очистить поля формы? - PullRequest
0 голосов
/ 03 октября 2010

У меня есть форма с полями, комбо и т. Д. Я хотел бы просмотреть все виджеты в форме и, если, например, это текстовое поле, очистить его, что-то вроде этого:

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

Проблема в том, что у объекта пользовательского интерфейса нет такого свойства, как у детей, и я не знаю, как получить всю коллекцию дочерних виджетов.

Возможно, у объекта формы есть что-то вроде метода Clear.Это было бы лучшим.

Спасибо

Ответы [ 2 ]

5 голосов
/ 03 октября 2010

Попробуй.

foreach(QLineEdit *widget, this->findChildren<QLineEdit*>()) {
    widget->clear();
}
2 голосов
/ 03 октября 2010

Сколько QLineEdit с мы говорим? Если нет веской причины, я бы просто добавил метод к классу, который имеет ui в качестве члена, и сделал бы это вручную, например:

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

Хорошая причина, по которой вы не можете сделать это таким образом, заключается в том, что QLineEdit добавляются динамически, а у вас их нет. В этом случае вы можете вызвать QObject :: children для виджета, который является родителем всех ваших QLineEdit s, если у них общее имя, QObject :: findChildren также будет работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...