Через дизайнер была создана форма, а на ней, по умолчанию, образовался QDialogButtonBox с Ok и Cancel. Для них система создала соответственно сигналы и слоты
Оба слота в итоге закроют окно. Да и сигналы эти передаются, когда кнопка уже отпущена.
А мне бы хотелось, не закрывать окно, если пользователь ввёл что-то не так, а мог сразу же исправить.
Значит, мне нужен сигнал pressed() (от QAbstractButton). Но вот незадача, такого у QDialogButtonBox нет!
Поговаривают, что можно обратится к кнопке из бокса как-то так
// in dialog contructor:
connect(ui->buttonBox->button(QDialogButtonBox::Reset), SIGNAL(clicked()), SLOT(on_reset_clicked())
http://www.qtcentre.org/threads/56986-intercepting-button-clicks-in-QDialogButtonBox?s=9e86359900b2d6a05b6fd969da14ae17&p=280861#post280861
Но у меня видит только "ButtonRole", а не кнопки. Следовательно вообще никаких сигналов нет.
ПыСы: да, можно создать просто две кнопки и накинуть на них сигналы-слоты по-простому, но это же слишком просто! :)
Вам не нужен сигнал pressed. При закрытии диалогового окна у него вызывается метод QDialog::closeEvent. Переопределите этот метод и в нём проверяйте правильность ввода. Если ввод неправильный, то вызовите метод QEvent::ignore. Примерно так:
void MyDialog::closeEvent(QCloseEvent *e)
{
//здесь проверьте ваш ввод
if (ввод неправильный)
e->ignore();
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости