Как правильно закрыть QDialog, когда главные окна скрыты? - PullRequest
3 голосов
/ 02 ноября 2011

У меня какая-то дилемма.

Я использую:

  • MSVS 2008
  • Qt 4.7.3 (с надстройкой Qt VS 1.1.9)

Я написал небольшое приложение Qt, основанное на QMainWindow классе, где также существует settings диалоговое окно (QDialog). Каждый работает нормально в режиме графического интерфейса. После этого я начал изменять свой проект, чтобы он был виден только в tray . Просто прокомментируйте метод main.cpp show(), например:

MainWindow w;
//w.show();

return app.exec();

Но из трея мне нужно запустить диалог settings , который реализован в файлах mainwindow.h / .cpp. Я добавил в трей меню действия (QAction), которое запускает диалог settings . И тут возникает неожиданная проблема: когда я пытался закрыть это диалоговое окно settings кнопкой [X] (в правом верхнем углу), мое приложение закрылось !

Вот слот действий:

void MainWindow::onOpenSettingsDlgClicked()
{
     SettingsDlg dlg( this );
     dlg.exec();
}

Я попытался переопределить метод virtual reject() для диалогового класса settings и установить там только функцию hide(), но это решение не помогло.

Что я делаю не так?

Спасибо тебе!

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Вы должны отключить свойство quitOnLastWindowClosed, которое включено по умолчанию, как определено в документе (http://doc.qt.nokia.com/latest/qapplication.html#quitOnLastWindowClosed-prop)

При этом вам придется самостоятельно обрабатывать завершение приложения QApplication, возможно, с помощью [выйти] в меню в трее.

0 голосов
/ 13 августа 2015

Только что нашел другой вариант, который кажется более подходящим, - переопределить closeEvent QDialog, чтобы только скрыть его.

void PrefDialog::closeEvent(QCloseEvent *event) {
    this->hide();
    event->ignore();
}

Мне показалось, что это лучше, потому что это не меняет поведение глобального приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...