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
了一个QDialog
, 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(); }
你可以附上一个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); }