Qt:如何处理用户按下“X”(closures)button的事件?

我正在开发一个使用Qt的应用程序。 我不知道哪个插槽对应于“用户点击窗口框的'X'(closures)”button的事件“即这个button:

关闭窗口的按钮

如果没有这个插槽,任何人都可以build议我一些其他的方法,我可以启动一个function后,用户按下该closuresbutton。

如果你有一个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(); } } 

如果你QDialog了一个QDialogcloseEvent不会被调用,所以你必须重写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(); } 

你可以附上一个SLOT的

 void aboutToQuit(); 

你QApplication的信号。 这个信号应该在应用程序closures之前提出。

你也可以重新实现保护成员QWidget :: closeEvent()

 void YourWidgetWithXButton::closeEvent(QCloseEvent *event) { // do what you need here // then call parent's procedure QWidget::closeEvent(event); }