QT中QDialog取消按Esc键关闭对话框实现

0 评论
/
12 阅读
/
1380 字
09 2025-02
分类:

原由

在做博客编辑器的时候,由于采用了对话框界面,误触ESC的时候,内容没有保存就退出了,所以希望实现QDialog检测按下ESC的时候不直接退出对话框. Image

实现方案

通过实现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,则对话框保持打开状态
    }
};
标签:
    暂无数据