Russian Qt Forum

Qt => Вопросы новичков => Тема начата: qwyllum от Июнь 12, 2013, 11:36



Название: QDialogButtonBox как отловить нажатие извне
Отправлено: qwyllum от Июнь 12, 2013, 11:36
Доброго времени суток! С-но, озадачился вопросом. Есть диалог, в котором у пользователя запрашиваются какие-то данные. После чего, из главной формы идет проверка:
Код:
if (Mydlg.exec() == QDialog::Accepted)// если пользователь подтвердил редактирование
    {
...
Такой метод работал как часы, пока однажды нечайно не удалил с панели диалога кнопки OK|Cancel. Спохватившись, перетянул новый ButtonBox на диалог, однако нажатие перестало отлавливаться. Конечно можно было бы забить, отменить последние действия и не парится, но мне стало интересно, как это все работает. Создал новый класс диалога с кнопками ОК-отмена, однако не нашел никакого кода, который бы что-то делал. Далее, удаляю ButtonBox и сразу же создаю новый с таким-же именем - больше нажатие на кнопку не работает. Вот и озадачился я - где же собака зарыта и как мне сделать, чтобы вышеописанный код снова заработал. Если кто подскажет, буду очень признатален :)


Название: Re: QDialogButtonBox как отловить нажатие извне
Отправлено: mutineer от Июнь 12, 2013, 11:42
Видимо родные кнопки связываются со слотами QDialog::accept () и QDialog::reject (), а при удалении эта связь исчезает


Название: Re: QDialogButtonBox как отловить нажатие извне
Отправлено: kambala от Июнь 12, 2013, 11:57
void QDialogButtonBox::accepted () [signal]
void QDialogButtonBox::rejected () [signal]


Название: Re: QDialogButtonBox как отловить нажатие извне
Отправлено: Alex Custov от Июнь 12, 2013, 13:22
Конечно можно было бы забить, отменить последние действия и не парится, но мне стало интересно, как это все работает. Создал новый класс диалога с кнопками ОК-отмена, однако не нашел никакого кода, который бы что-то делал. Далее, удаляю ButtonBox и сразу же создаю новый с таким-же именем - больше нажатие на кнопку не работает.

Когда ты создаёшь диалог с buttonbox, designer автоматом создаёт два соединения сигнал-слот, их ты можешь увидеть в редакторе сигналов-слотов. Когда ты удаляешь старый buttonbox и добавляешь свой, то соединения уже не будет, и его нужно добавить самому.