Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] closeEvent() Как отменить закрытие формы ?


Автор: andrew_121 24.3.2008, 15:51
Перегрузил QDialog::closeEvent(), как отменить закрытие формы ?

Автор: JackYF 24.3.2008, 16:09
Цитата(andrew_121 @  24.3.2008,  14:51 Найти цитируемый пост)
как отменить закрытие формы ?

Хм. Оставить процедуру пустой пробовал?

Автор: andrew_121 24.3.2008, 16:29
JackYF, С этим разобрался.
Это виртуальный член, если не обработать или не отменить событие, то оно по предкам до QWidget дойдет, и хана......
Код

QDialog::closeEvent(QCloseEvent *evnt)
{
    if (!closeDialog)
        evnt->ignore(); // <<<<<<<<<<<< Вот ОНО !!!
    QDialog::closeEvent(evnt);
}

Автор: andrew_121 24.3.2008, 17:00
К стати, если сделать вот так:
Код

QDialog::closeEvent(QCloseEvent *evnt) {
   evnt->ignore();
}

То пропадает интерфейс, а прога остается себе работать, как приличный демон!
На заметку !

Автор: archimed7592 24.3.2008, 20:04
Цитата(andrew_121 @  24.3.2008,  17:00 Найти цитируемый пост)
На заметку ! 

На заметку: если хочешь, чтобы был нормальный behaviour - делай accept, если не делаешь ignore.
Код

QDialog::closeEvent(QCloseEvent *evnt) {
    if (!closeDialog)
        evnt->ignore();
    else
        evnt->accept();
}

Ну а так:

Цитата(andrew_121 @  24.3.2008,  17:00 Найти цитируемый пост)
QDialog::closeEvent(QCloseEvent *evnt) {
   evnt->ignore();
}

У тебя просто не будет закрываться окно, ибо безусловный ignore.

Что же касается
Код

QDialog::closeEvent(QCloseEvent *evnt) {
   evnt->ignore();
   QDialog::closeEvent(evnt);
}
Это всё равно, что написать
Код

QDialog::closeEvent(QCloseEvent *evnt) {
   evnt->ignore();
   evnt->accept();// QDialog::closeEvent(evnt);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)