Russian Qt Forum
Сентябрь 30, 2024, 14:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDialog и событие hide();  (Прочитано 7256 раз)
admsasha
Гость
« : Сентябрь 22, 2009, 04:55 »

Есть модальное окно, созданное через Designer. Как сделать, чтобы при нажатии esc окно не закрывалось ?
Записан
erslee
Гость
« Ответ #1 : Сентябрь 22, 2009, 09:46 »

А если установить eventFilter и отлавливать нажатие клавиши и не пускать его дальше
Записан
admsasha
Гость
« Ответ #2 : Сентябрь 23, 2009, 02:51 »

А если установить eventFilter и отлавливать нажатие клавиши и не пускать его дальше
Сделал так
Код:
this->installEventFilter(this);

bool frm1::eventFilter(QObject *o, QEvent *e){
    if (e->type() == QEvent::Hide ){
        return 0; // пробывал return 1;
    }

    return QWidget::eventFilter(o, e);
}
Окно всё равно закрывается. Какой QEvent ловить и как не пускать дальше ?
Записан
ildar
Гость
« Ответ #3 : Сентябрь 23, 2009, 10:47 »

вот здесь есть мысли на этот счет
http://lists.trolltech.com/qt-interest/2005-04/thread00872-0.html
Записан
baka
Гость
« Ответ #4 : Сентябрь 24, 2009, 09:28 »

Обработка нажатия на Esc в QDialog выглядит  так...

Код:
void QDialog::keyPressEvent(QKeyEvent *e)
{
    //   Calls reject() if Escape is pressed. Simulates a button
    //   click for the default button if Enter is pressed. Move focus
    //   for the arrow keys. Ignore the rest.

{some code }

        case Qt::Key_Escape:
            reject();
            break;
};

т.е. можно перекрыть keyPressEvent.
Код:
void MyDialog::keyPressEvent(QKeyEvent *e) {
        if(e->key() != Qt::Key_Escape)
                return QDialog::keyPressEvent(e);
};

Записан
SABROG
Гость
« Ответ #5 : Сентябрь 24, 2009, 11:51 »

Или перекрыть reject().
Записан
admsasha
Гость
« Ответ #6 : Сентябрь 24, 2009, 12:55 »

Спасибо за советы, сделал через eventFilter отлавливая keyPressEvent ESC
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Сентябрь 24, 2009, 13:11 »

правильное решение - переопределить keyPressEvent(). Вообще-то непонятно, почему такое поведение никак не регулируется. Мне тоже надо было отключить ESC в нескольких диалогах, было бы значительно удобнее иметь стандартный метод QDialog::setCloseOnEsc() или типа того.
Записан
baka
Гость
« Ответ #8 : Сентябрь 24, 2009, 18:56 »

Может даже лучше написать DialogUtils::deprecateEsc(QDialog *);
или DialogUtils::setRejectKey(QDialog*, Qt::Key);

а в теле deprecateEsc(QDialog *) подвешивать к диалогу eventFilter
можно будет потом в других проектах использовать одной строчкой.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.