Qt自定义关闭窗口行为:仅点击关闭按钮弹出提示
Qt自定义关闭窗口行为:仅点击关闭按钮弹出提示
在Qt开发中,我们有时需要自定义窗口的关闭行为,例如仅在点击窗口关闭按钮时弹出提示窗口,而通过代码调用this->close()则直接关闭窗口。
实现这一功能的关键在于重写窗口的closeEvent事件处理函数。
代码示例:
#include <QtWidgets>
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {}
protected:
void closeEvent(QCloseEvent *event) override
{
// 判断是通过点击关闭按钮触发的关闭事件
if (event->spontaneous()) {
// 弹出提示窗口
QMessageBox::StandardButton reply = QMessageBox::question(this,
'确认关闭',
'确定要关闭窗口吗?',
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
// 点击OK,关闭窗口
event->accept();
} else {
// 点击取消,不关闭窗口
event->ignore();
}
} else {
// 其他方式关闭窗口,直接关闭
event->accept();
}
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
代码解析:
- 重写
closeEvent函数: 我们重写了MainWindow类的closeEvent函数,该函数会在窗口关闭时被调用。 - 判断关闭事件来源: 通过调用
event->spontaneous()函数,我们可以判断该关闭事件是否由用户点击窗口关闭按钮触发。 - 弹出提示窗口: 如果是用户点击关闭按钮触发的,则弹出提示窗口,询问用户是否确认关闭。
- 处理用户选择: 根据用户的选择,调用
event->accept()关闭窗口,或调用event->ignore()取消关闭操作。 - 其他关闭方式: 如果不是用户点击关闭按钮触发的,例如通过代码调用
this->close(),则直接调用event->accept()关闭窗口,不弹出提示窗口。
通过以上代码,我们实现了仅在点击窗口关闭按钮时弹出提示窗口,而通过其他方式关闭窗口则直接关闭的功能。
原文地址: https://www.cveoy.top/t/topic/fzT8 著作权归作者所有。请勿转载和采集!