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