Вызвать сигнал pressed() для QDialogButtonBox

322
19 мая 2017, 16:57

Через дизайнер была создана форма, а на ней, по умолчанию, образовался 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", а не кнопки. Следовательно вообще никаких сигналов нет.

ПыСы: да, можно создать просто две кнопки и накинуть на них сигналы-слоты по-простому, но это же слишком просто! :)

Answer 1

Вам не нужен сигнал pressed. При закрытии диалогового окна у него вызывается метод QDialog::closeEvent. Переопределите этот метод и в нём проверяйте правильность ввода. Если ввод неправильный, то вызовите метод QEvent::ignore. Примерно так:

void MyDialog::closeEvent(QCloseEvent *e)
{
    //здесь проверьте ваш ввод
    if (ввод неправильный)
        e->ignore();
}
READ ALSO
Полное блокирование Windows

Полное блокирование Windows

Есть задача разработать софт, который полностью блокирует рабочую станцию, показывая уведомлениеНе должны работать никакие Alt+Tab, Ctrl+Alt+Del...

340
Метод Монте-Карло

Метод Монте-Карло

Нужно посчитать вероятность совпадения 2 чисел (похожее парадокс дней рождения) методом Монте-КарлоВроде делаю правильно, но правильная...

264
Как включить QtChart в виджет?

Как включить QtChart в виджет?

Как вставить Qt-график в какой-либо виджет? Вот, к примеру, функция, которая создает диаграммуКак вставить её в виджет, чтобы можно было её отобразить?

403