Qt: как я могу обрабатывать событие, когда пользователь нажимает кнопку " X " (закрыть)?
Я разрабатываю приложение с использованием Qt. Я не знаю, какой слот соответствует событию "пользователь нажимает кнопку" X "(закрыть) оконной рамы", т. е. эта кнопка:
Если для этого нет слота, может ли кто-нибудь предложить мне какой-то другой метод, с помощью которого я могу запустить функцию после того, как пользователь нажмет эту кнопку закрытия.
4 ответа:
если у вас
QMainWindow
можно переопределитьcloseEvent
метод.#include <QCloseEvent> void MainWindow::closeEvent (QCloseEvent *event) { QMessageBox::StandardButton resBtn = QMessageBox::question( this, APP_NAME, tr("Are you sure?\n"), QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes, QMessageBox::Yes); if (resBtn != QMessageBox::Yes) { event->ignore(); } else { event->accept(); } }
если вы подкласс aQDialog
наcloseEvent
не будет называться, и поэтому вы должны переопределитьreject()
:void MyDialog::reject() { QMessageBox::StandardButton resBtn = QMessageBox::Yes; if (changes) { resBtn = QMessageBox::question( this, APP_NAME, tr("Are you sure?\n"), QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes, QMessageBox::Yes); } if (resBtn == QMessageBox::Yes) { QDialog::reject(); } }
Ну, я понял. Один из способов-переопределить
QWidget::closeEvent
(QCloseEvent *event)
метод в определении класса и добавить свой код в этой функции. Пример:class foo : public QMainWindow { Q_OBJECT private: void closeEvent(QCloseEvent *bar); // ... }; void foo::closeEvent(QCloseEvent *bar) { // Do something bar->accept(); }