我正在使用Qt开发一个应用程序。我不知道哪个槽对应于“用户点击窗口框架的‘X’(关闭)按钮”的事件,即这个按钮:
如果没有这样的插槽,有没有人能给我一些建议,让我在用户按下关闭按钮后启动一个功能。
发布于 2013-07-05 14:53:06
如果你有一个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
的子类,则不会调用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();
}
}
发布于 2013-07-05 12:46:40
好吧,我知道了。一种方法是覆盖类定义中的QWidget::closeEvent
(QCloseEvent *event)
方法,并将代码添加到该函数中。示例:
class foo : public QMainWindow
{
Q_OBJECT
private:
void closeEvent(QCloseEvent *bar);
// ...
};
void foo::closeEvent(QCloseEvent *bar)
{
// Do something
bar->accept();
}
发布于 2013-07-05 18:44:06
您可以将插槽附加到
void aboutToQuit();
你的QApplication信号。此信号应在应用程序关闭之前发出。
https://stackoverflow.com/questions/17480984
复制相似问题