crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как запретить закрытие диалогового окна при нажатии esc?
Rocky
  опции профиля:
сообщение 12.3.2009, 19:22
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


сабж

Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Kagami
  опции профиля:
сообщение 12.3.2009, 19:41
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


При нажатии кнопки Esc вызывается слот QDialog::reject(). Вот его и надо переопределить в своем диалоге, например, чтобы он ничего не делал.

Сообщение отредактировал Kagami - 12.3.2009, 19:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.3.2009, 20:21
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а можно делать как у тролей в пример MDI:
void MainWindow::closeEvent(QCloseEvent *p_event)
{
    p_event->ignore();
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.3.2009, 10:02
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Litkevich Yuriy,
не получиться предложенным способом. я где то читал что по escape все равно будет закрываться.
вот код можно проверить
#include <QApplication>
#include <QDialog>
#include <QtDebug>
#include <QCloseEvent>

class Dialog:public QDialog {
    public:
        Dialog(QWidget* parent=0):QDialog(parent)
        {
                qDebug()<<__PRETTY_FUNCTION__;
        }
    protected:
    void closeEvent(QCloseEvent* ev)
    {
        qDebug()<<__PRETTY_FUNCTION__;
        ev->ignore();
    }

};

int main(int a,char** b)
{
    QApplication app(a,b);
    Dialog dl;
    dl.show();
    return app.exec();
}

походу просто напросто по escape closeEvent не вызывается.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 13.3.2009, 10:15
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(kwisp @ 13.3.2009, 10:02) *
походу просто напросто по escape closeEvent не вызывается.

Цитата из assistant в разделе QDialog:
Цитата
Escape Key
If the user presses the Esc key in a dialog, QDialog::reject() will be called. This will cause the window to close: The close event cannot be ignored.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.3.2009, 10:17
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(BRE @ 13.3.2009, 10:15) *
Цитата из assistant в разделе QDialog:

говорю же где то читал. искал сейчас это место чтобы процитировать... не мог найти
:)
пришлось пример написать.

Сообщение отредактировал kwisp - 13.3.2009, 10:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 13.3.2009, 13:00
Сообщение #7


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


у меня тоже клозе евент по ескапу не срабатывает, причем что самое странное окно секунд 10 по ескапе не закрывается, а потом если нажать то закрывается

во, переопределил reject в паре с клозе и заработало
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.3.2009, 20:31
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(kuler @ 13.3.2009, 13:00) *
во, переопределил reject в паре с клозе и заработало

будет работать и без
Цитата(kuler @ 13.3.2009, 13:00) *
клозе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 13.3.2009, 22:27
Сообщение #9


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


kwisp

ок, а как узнать, closeEvent сработал после нажатия кнопки esc или после нажатия кнопки "Отмена"?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 13.3.2009, 22:37
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Rocky,
повторимся.
в классе QDialog после нажатия escape closeEvent не срабатывает вообще.
собери мой пример и посмотри в вывод в лог.

в других виджетах так сразу на ум ничего не приходит надо подумать.....

Сообщение отредактировал kwisp - 13.3.2009, 22:38
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.9.2019, 13:34