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

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 == 666
    qDebug() << "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 something
    QDialog::reject();
}

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


http://www.kler.cn/a/288535.html

相关文章:

  • [代码随想录Day10打卡] 理论基础 232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
  • 【算法】——二分查找合集
  • uniapp+vue2 设置全局变量和全局方法 (兼容h5/微信小程序)
  • AI绘画经验(stable-diffusion)
  • 【juc】AbstractQueuedSynchronized为什么采用双向链表
  • 红日靶机(七)笔记
  • Golang使用Quic-Go开源库实现Quic客户端和服务端
  • Unity接入飞行遥杆外设
  • 【BES2500x系列 -- RTX5操作系统】Battery模块 -- 创建电池检测定时器 --(十五)
  • 利用Spring Boot的@Transactional注解保障业务数据的一致性
  • 2024 【Delphi 12】苹果ios开发环境配置(五星保姆级)
  • UML(ER) manual book
  • 深入理解Java序列化:从入门到实践
  • c++ std::advance 使用简介
  • MySQL库表设计规范
  • IMU助力预测青少年脊柱侧弯
  • Apache DolphinScheduler大规模任务调度系统对大数据实时Flink任务支持
  • TikTok运营:IP地址如何影响TikTok的内容运营?
  • 内存管理篇-20 Linux虚拟内存管理
  • 亚信安全荣获“2024年网络安全优秀创新成果大赛”优胜奖
  • 缓存预热有哪些方案?
  • Java面试题真题·项目介绍部分总结
  • 【测试】bug 相关知识点总结
  • 单片机原理图与PCB设计心得体会
  • 解决Qt Creator与MSVC不匹配的问题
  • WebView快速打开