实例20240210

重新实现QWidget中的受保护虚函数closeEvent()


1.首先以创建一个MainWindow项目,通过main函数里的默认代码支持事件循环。

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);  //创建应用程序对象
    MainWindow w;
    w.show();
    return a.exec();   //启动事件循环机制
}

2.在头文件中重写继承于QWidget中的受保护虚函数closeEvent()。

class MainWindow : public QMainWindow  //QMainWindow 也是继承于QWidget的
{
    Q_OBJECT
public:
    MainWindow(QWidget* parent = nullptr);
    ~MainWindow();

protected:
    void closeEvent(QCloseEvent* event);   //重实现QWidget中受保护的事件处理虚函数closeEvent

private:
    Ui::MainWindow* ui;
};

3.在类的实现函数中重写closeEvent()。

/*
* 注意区别:closeEvent()函数是继承于QWidget的事件处理函数
*          参数中QCloseEvent是关闭事件类,event是此类的指针        
*/

void MainWindow::closeEvent(QCloseEvent* event)  
{
    //弹出一个信息框,用户选择yes或no, 返回值是int常量
    int ret = QMessageBox::question(this, "提问", "确定关闭窗口吗?");

    if (ret == QMessageBox::Yes) {
        event->accept();  //如果用户Yes就接受关闭事件
    } else {
        event->ignore();  //否则拒绝关闭
    }
}

4.运行,选No拒绝关闭事件,选Yes接受关闭事件。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值