![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Rocky |
![]()
Сообщение
#1
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
Как сделать, чтобы если пользователь нажимает "ОК", то если небыло введено какое-то значение, то диалоговое окно не закрывалось?
Спасибо! Потому что как я понимаю обработчик ОК вызывается уже после закрытия самого диалогового окна. |
|
|
kwisp |
![]()
Сообщение
#2
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Как сделать, чтобы если пользователь нажимает "ОК", то если небыло введено какое-то значение, то диалоговое окно не закрывалось? Спасибо! Потому что как я понимаю обработчик ОК вызывается уже после закрытия самого диалогового окна. предлагаю переместить вопрос в тему анекдоты ![]() покажи код. что и при каких событиях ты закрываешь??? |
|
|
Rocky |
![]()
Сообщение
#3
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
Ок, вопрос идиотский я полностью согласен ))) Просто на MFC это делается элементарно. На QT такой фокус не проходит.
вот весь код. Если брейкпоинт ставить внутри хм.... слота (обработчика) OnBnClickedBtnOk() то падаю я в него уже после того как диалоговое окно закрылось. Т.е. в данном случае, если содержимое m_pRoomName (LineEdit) пусто, то по return-у я выхожу естественно из слота, но само диалоговое окно уже закрыто. В MFC такой "фокус" прокатывал без проблем... Здесь нет. Поэтому я и спрашиваю, как правильно поступать. Кажется есть такой closeEvent(...). Может его перехватывать, и возвращать код (accepted и пр.) в зависимости от нужд? Или как? |
|
|
Rocky |
![]()
Сообщение
#4
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
В MFC диалоговое окно закрывают методы CDialog::OnOk и CDialog::OnCacel. Которые приводят к вызову EndDialog. Если до их вызова ставить return, то диалоговое окно не закрывается... Непонятно как тут поступать.
|
|
|
molchanoviv |
![]()
Сообщение
#5
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
Ну так и тут QDialog::Accepted и если не ошибаюсь QDialog::Rejected Но зачем тебе это? Может просто сделать окно немодальным? Я просто немного не понял.
Сообщение отредактировал molchanoviv - 24.12.2008, 23:39 |
|
|
kwisp |
![]()
Сообщение
#6
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
слушай, действовать череЗ closeEvent() можно элементарно переопределяя его в своем классе наследнике тем или иным образом от QWidget. можно юзать фильтры событий .... и т.д.
но честно говоря, это как-то черз шиворот навыворот для твоей простенькой задачки. я бы создал свой виджет - пусть он не наследник QDialog а просто наследник QWidget. разместил на нем что тебе там надо (думаю не много) и обрабатывал сам нажатия на кнопки. думаю даже на размер кода это не повлияет... |
|
|
Rocky |
![]()
Сообщение
#7
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
Ну так и тут QDialog::Accepted и если не ошибаюсь QDialog::Rejected Но зачем тебе это? Может просто сделать окно немодальным? Я просто немного не понял. А откуда их возвращать? Из closeEvent? А как узнать тогда, сам этот closeEvent был вызван после нажатия OK или Cancel? Можно конечно через флаги (переменные типа bool) все сделать.... Но это какое-то химиченье ...имхо.... Немодальным окно сделать нельзя, т.к. нельзя давать пользователю делать какие-то действия, пока он не завершит текущие грубо говоря. Цитата Я просто немного не понял. Есть модальное диалоговое окно. Есть кнопка OK (имя объекта okButton). Как сделать, чтобы по нажатию на ОК диалоговое окно закрывалось, если все поля в нем заполнены правильно, и не закрывалось, если хотя бы одно из полей не заполнено. В приведенном выше коде диалоговое окно закрывается всегда. kwisp Ок, доберусь до работы попробую. ![]() |
|
|
kwisp |
![]()
Сообщение
#8
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
смотри. по нажатии на кнопке она высылает сигнал clicked()
соединяешь сигнал этой кнопки со слотом обработчиком где нибудь скажем в конструкторе.
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Rocky, ты ведь делаешь наследника от QDialog. Тогда в твоем классе CRoomDialog можно сделать так:
пользователь в водит данные в виджет, по изменению в этом виджете срабатывает слот проверки, если все верно, то конпка Ок становится активной. А изначально она не активна и пользователь не может на нее нажать. |
|
|
kwisp |
![]()
Сообщение
#10
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
Rocky, ты ведь делаешь наследника от QDialog. Тогда в твоем классе CRoomDialog можно сделать так: пользователь в водит данные в виджет, по изменению в этом виджете срабатывает слот проверки, если все верно, то конпка Ок становится активной. А изначально она не активна и пользователь не может на нее нажать. +1 балл. красивое решение. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.3.2025, 6:49 |