当前位置: 首页 > news >正文

Qt Dialog退出事件

关于Dialog退出事件思考

首先我们来看下Dialog的成员函数

// 构造函数
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 模态显示窗口
[virtual slot] int QDialog::exec();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 关闭对话框并将其结果代码设置为r。finished()信号将发出r;
// 如果r是QDialog::Accepted 或 QDialog::Rejected,则还将分别发出accept()或Rejected()信号。
[virtual slot] void QDialog::done(int r);

注意到 acceptreject 都是隐藏窗口
接下来我们看一下Dialog的返回值

// 创建对话框对象
Dialog dlg;    
int ret = dlg.exec();
if(ret == QDialog::Accepted)
{qDebug() << "accept button clicked...";
}
else if(ret == QDialog::Rejected)
{qDebug() << "reject button clicked...";
}
else
{// ret == 666qDebug() << "done button clicked...";
}

点击右上角的关闭按钮后返回的是QDialog::Rejected
一般而言我们会设置关闭按钮的事件为close(),这里会调用CloseEvent事件,因此可以重写覆盖CloseEvent,从而得到我们想要的效果

void Dialog::slotCloseBtn()
{this->close();
}void Dialog::closeEvent(QCloseEvent *event)
{// 设置close后就会执行这里的事件QDialog::accept();// this->reject();// this->done(123);
}

当然还有一种例外,当按下ESC,不会走closeEvent,那么我们需要重写覆盖reject事件

void Dialog::reject()
{// do somethingQDialog::reject();
}

此外,只有设置**setAttribute(Qt::WA_DeleteOnClose);**在关闭Dialog时才会析构

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AIGC时代从新手到高手:B端竞品分析实战案例与技巧分享
  • 华为Huawei路由器交换机SSH配置
  • 设计模式-结构型模式-组合模式
  • 学习WebGl基础知识(二)
  • Docker原理及实例
  • 使用docker部署project-exam-system(项目)
  • QT connect的使用
  • SLM2110CG 1.0A/1.6A600V完美代替IR2110 精准驱动,可靠之芯 高压、高速的功率MOSFET和IGBT驱动器
  • 【深度解读】知识库的作用
  • NVIDIA GeForce RTX标志升级 加入AI的力量
  • 9、Django Admin优化查询
  • MacOS下WKWebView设置背景透明问题
  • 行业内幕曝光!全域运营公司究竟哪家好?
  • 【mac】MAC命令快速模糊查找文件
  • MySQL的事务认识
  • Babel配置的不完全指南
  • httpie使用详解
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Linux gpio口使用方法
  • PHP的Ev教程三(Periodic watcher)
  • Solarized Scheme
  • vue 配置sass、scss全局变量
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 电商搜索引擎的架构设计和性能优化
  • 动态魔术使用DBMS_SQL
  • 免费小说阅读小程序
  • 使用Gradle第一次构建Java程序
  • 双管齐下,VMware的容器新战略
  • 在Mac OS X上安装 Ruby运行环境
  • k8s使用glusterfs实现动态持久化存储
  • Spring第一个helloWorld
  • 阿里云ACE认证学习知识点梳理
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​configparser --- 配置文件解析器​
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)计算机毕业设计高校学生选课系统
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三)c52学习之旅-点亮LED灯
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (算法)硬币问题
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)平衡树
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net wcf memory gates checking failed
  • .Net Web窗口页属性
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @RequestMapping用法详解