原由
在做博客编辑器的时候,由于采用了对话框界面,误触ESC的时候,内容没有保存就退出了,所以希望实现QDialog检测按下ESC的时候不直接退出对话框.
实现方案
通过实现QDialog的的reject()方法实现是最合适的,也是最简单有效的处理方式,因为这样子在用户点关闭按钮的时候,也会处理.
下面是详细的实现过程:
QDialog 重写 reject() 在里面加上确认对话框,确认后才关闭 在Qt中,QDialog 的 reject() 方法是用来关闭对话框并返回 Rejected 状态。如果你想在调用 reject() 之前添加一个确认对话框,你可以通过重写 reject() 方法并在该方法内部实现一个确认对话框来实现。
下面是一个如何实现这一功能的示例:
重写 reject() 方法:在你的对话框类中重写 reject() 方法。
显示确认对话框:在重写的 reject() 方法中,先显示一个确认对话框。
根据用户的选择调用 reject() 或返回:如果用户确认,则调用基类的 reject() 方法;如果用户取消,则不调用 reject(),从而保持对话框打开。
示例代码 假设你有一个名为 MyDialog 的对话框类,可以按照以下方式重写 reject() 方法:
#include <QDialog>
#include <QMessageBox>
#include <QPushButton>
class MyDialog : public QDialog {
Q_OBJECT
public:
MyDialog(QWidget *parent = nullptr) : QDialog(parent) {
// 初始化对话框的代码
}
protected:
void reject() override {
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "确认", "确定要关闭对话框吗?",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
QDialog::reject(); // 调用基类的 reject() 方法来关闭对话框
}
// 如果用户选择 No,则对话框保持打开状态
}
};