Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Как запретить закрытие диалогового окна при нажатии esc?

Автор: Rocky 12.3.2009, 19:22

сабж

Спасибо.

Автор: Kagami 12.3.2009, 19:41

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

Автор: Litkevich Yuriy 12.3.2009, 20:21

а можно делать как у тролей в пример MDI:

void MainWindow::closeEvent(QCloseEvent *p_event)
{
    p_event->ignore();
}

Автор: kwisp 13.3.2009, 10:02

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

Цитата(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

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

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

Автор: kuler 13.3.2009, 13:00

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

во, переопределил reject в паре с клозе и заработало

Автор: kwisp 13.3.2009, 20:31

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

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

Автор: Rocky 13.3.2009, 22:27

kwisp

ок, а как узнать, closeEvent сработал после нажатия кнопки esc или после нажатия кнопки "Отмена"?

Автор: kwisp 13.3.2009, 22:37

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

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)