Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: White Owl от Декабрь 31, 2014, 00:07



Название: Как отменить закрытие диалога?
Отправлено: White Owl от Декабрь 31, 2014, 00:07
Есть диалоговое окошко с QDialogButtonBox.
Надо по нажатию Ok проверить несколько полей в диалоге и если они не прошли проверку показать соответствующую ругань и не закрывать диалог.

Сделал
Код:
void MyDialog::on_buttonBox_clicked( QAbstractButton *button) {
    if(button == buttonBox->button(QDialogButtonBox::Ok)) {
        if( форма заполнена неправильно) {
           QMessageBox::warning(...);
           return;
        }
        accept();
    }
}
Ругательное сообщение появляется, а по его закрытию - закрывается и весь диалог. Почему???
Что надо сделать чтобы он не закрывался если не вызван accept()?


Название: Re: Как отменить закрытие диалога?
Отправлено: kambala от Декабрь 31, 2014, 01:24
перегрузи метод accept() и вызывай метод суперкласса только в случае прохождения всех проверок


Название: Re: Как отменить закрытие диалога?
Отправлено: White Owl от Декабрь 31, 2014, 01:44
в смысле, MyDialog::accept()? А сигналы от buttonBox вообще не трогать? мм.. Да, должно сработать. Спасибо.


Название: Re: Как отменить закрытие диалога?
Отправлено: kambala от Декабрь 31, 2014, 01:49
все верно.

если buttonBox создан в дизайнере, то там уже стоят коннекты на accept() и reject(). в противном случае надо самому законнектить.


Название: Re: Как отменить закрытие диалога?
Отправлено: Shadowgran от Январь 08, 2015, 11:19
Where the service is available.