我正在使用 Qt 开发应用程序。我不知道哪个槽对应于“用户单击窗口框架的'X'(关闭)按钮”的事件,即这个按钮:
如果没有这个插槽,任何人都可以建议我一些其他方法,在用户按下该关闭按钮后我可以启动一个功能。
如果你有一个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();
}
}
如果您将 a 子类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 的信号。这个信号应该在应用程序关闭之前发出。
你也可以重新实现受保护的成员 QWidget::closeEvent()
void YourWidgetWithXButton::closeEvent(QCloseEvent *event)
{
// do what you need here
// then call parent's procedure
QWidget::closeEvent(event);
}