Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как запретить закрытие диалогового окна при нажатии esc?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Rocky
сабж

Спасибо.
Kagami
При нажатии кнопки Esc вызывается слот QDialog::reject(). Вот его и надо переопределить в своем диалоге, например, чтобы он ничего не делал.
Litkevich Yuriy
а можно делать как у тролей в пример MDI:
void MainWindow::closeEvent(QCloseEvent *p_event)
{
    p_event->ignore();
}
kwisp
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
Цитата(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
Цитата(BRE @ 13.3.2009, 10:15) *
Цитата из assistant в разделе QDialog:

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

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

будет работать и без
Цитата(kuler @ 13.3.2009, 13:00) *
клозе
Rocky
kwisp

ок, а как узнать, closeEvent сработал после нажатия кнопки esc или после нажатия кнопки "Отмена"?
kwisp
Rocky,
повторимся.
в классе QDialog после нажатия escape closeEvent не срабатывает вообще.
собери мой пример и посмотри в вывод в лог.

в других виджетах так сразу на ум ничего не приходит надо подумать.....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.