Qt学习 重写closeEvent退出对话框

前言

当我们点击Qt主界面上的X(退出)按键时,程序就直接退出。没有任何提示,这样对于一个软件是个缺陷,所以本文就是来解决这个问题。通过重写Qt的closeEvent函数,来实现退出程序时的提示对话框。

代码实现

在mainWindow.h中,添加如下代码
#include <QCloseEvent>
void closeEvent(QCloseEvent *event);    // 重写closeEvent的申明


在mainWindow.cpp中,添加如下代码
// 重写closeEvent: 确认退出对话框
void MainWindow::closeEvent(QCloseEvent *event)
{
    QMessageBox::StandardButton button;
    button=QMessageBox::question(this,tr("退出程序"),QString(tr("确认退出程序")),QMessageBox::Yes|QMessageBox::No);
    if(button==QMessageBox::No)
    {
        event->ignore(); // 忽略退出信号,程序继续进行
    }
    else if(button==QMessageBox::Yes)
    {
        event->accept(); // 接受退出信号,程序退出
    }
}

结果



备注

上述代码是使用QMessage的question函数来显示提示对话框的,同样可以使用information、warning等函数来显示提示对话框。
Qt中,closeEvent是QWidget类的一个事件处理函数,用于处理窗口关闭事件。通过重写closeEvent函数,可以在窗口关闭时执行自定义的操作。 以下是重写closeEvent的步骤: 1. 在自定义的QWidget派生类中,重写closeEvent函数。可以在头文件(.h)中声明该函数,并在源文件(.cpp)中实现。 2. 在closeEvent函数中,可以添加自定义的逻辑代码,例如保存数据、确认关闭等操作。 3. 在重写closeEvent函数时,需要调用父类的closeEvent函数,以确保窗口的默认关闭行为仍然有效。 下面是一个示例代码,展示了如何重写closeEvent函数: ```cpp // MyWidget.h #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = nullptr); protected: void closeEvent(QCloseEvent *event) override; }; // MyWidget.cpp #include "MyWidget.h" #include <QMessageBox> MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // 构造函数 } void MyWidget::closeEvent(QCloseEvent *event) { // 自定义的关闭事件处理逻辑 QMessageBox::StandardButton reply; reply = QMessageBox::question(this, "确认关闭", "确定要关闭窗口吗?", QMessageBox::Yes | QMessageBox::No); if (reply == QMessageBox::Yes) { // 执行关闭操作 event->accept(); } else { // 取消关闭操作 event->ignore(); } } ``` 在上述示例中,我们创建了一个名为MyWidget的自定义QWidget派生类,并重写closeEvent函数。在closeEvent函数中,我们使用QMessageBox显示一个确认对话框,询问用户是否确定关闭窗口。根据用户的选择,我们可以执行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值