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

QT QDialog 中的按钮,如何按下后触发 accepted 消息?

QT 作为跨平台的系统,对话框并没有采用 Windows API 那种模式,通过返回 mrOK、mrCancel 等结果告诉调用方结果,而是采用了 accepted、rejected 等信号确定执行结果。下面介绍几种出发这些信号的方法。

1. 在按钮的 clicked 槽函数中触发 accepted 信号

在 Qt 的 QDialog 中,要实现在按下按钮后触发 accepted 信号,你通常需要将按钮的 clicked 信号连接到一个槽函数上,然后在该槽函数中调用 accept() 方法。以下是一个简单的示例代码,展示了如何实现这一功能:

#include <QDialog>  
#include <QPushButton>  class MyDialog : public QDialog {  Q_OBJECT  public:  MyDialog(QWidget *parent = nullptr) : QDialog(parent) {  QPushButton *button = new QPushButton("OK", this);  connect(button, &QPushButton::clicked, this, &MyDialog::onButtonClicked);  }  private slots:  void onButtonClicked() {  accept(); // 触发 accepted 信号  }  
};

2. 在 finished 槽函数中触发 acepted 信号

在 Qt 中,当 QDialog 关闭时,它会发出一个 finished 信号。如果你想在对话框关闭时执行特定的操作,可以将这个信号连接到一个槽函数上。

例如,你可以像这样定义一个槽函数:

void MyClass::onDialogFinished(int result) {  if (result == QDialog::Accepted) {  // 对话框被接受,执行一些操作...  } else {  // 对话框被拒绝或以其他方式关闭,执行其他操作...  }  
}

然后,在对话框关闭时,你可以连接 finished 信号到这个槽函数:

connect(myDialog, &QDialog::finished, this, &MyClass::onDialogFinished);

这样,无论 myDialog 是如何关闭的(通过 accept() 或 reject(),或者其他原因),onDialogFinished 函数都会被调用,并且可以根据返回的结果码执行相应的操作。

3. 在 exec() 后触发 accepted 信号

QDialog::exec() 是 Qt 框架中 QDialog 类的一个方法,用于显示对话框并进入模态循环。当对话框显示时,它会阻止用户与其他窗口交互,直到对话框被关闭。

当 exec() 被调用时,它会进入一个事件循环,等待用户与对话框进行交互(如点击按钮)。一旦用户与对话框完成交互(例如,点击了“OK”或“Cancel”按钮),exec() 方法会返回一个 int 类型的值,表示用户的操作结果。

返回值可能是以下之一:

  • Accepted:用户点击了“OK”按钮。
  • Rejected:用户点击了“Cancel”按钮或其他取消操作。

使用 exec() 的一个简单示例:

QDialog dialog;  
dialog.setWindowTitle("示例对话框");  
dialog.setText("这是一个示例对话框。");  
dialog.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);  int result = dialog.exec();  if (result == QDialog::Accepted) {  // 用户点击了“OK”按钮  
} else if (result == QDialog::Rejected) {  // 用户点击了“Cancel”按钮或其他取消操作  
}

相关文章:

  • Java+SpringBoot:构建稳定高效的计算机基础教学平台
  • UE中的Cast和CastChecked
  • 「云原生可观测团队」获选「InfoQ 年度技术内容贡献奖」
  • day38WEB攻防-通用漏洞XSS跨站绕过修复http_onlyCSP标签符号
  • 【Nginx】nginx入门
  • 一个 SpringBoot 项目能同时处理多少请求?
  • jmeter-03界面介绍
  • [SWPUCTF 2021 新生赛]Do_you_know_http
  • 红队打靶练习:PHOTOGRAPHER: 1
  • 使用No-SQL数据库支持连接查询用例的讨论
  • HarmonyOS远程真机调试方法
  • 品牌如何营造生活感氛围?媒介盒子分享
  • 列式数据库、行式数据库简介
  • 韦达定理用处多
  • Python爬虫urllib详解
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • HTTP--网络协议分层,http历史(二)
  • Laravel Telescope:优雅的应用调试工具
  • mysql_config not found
  • Rancher-k8s加速安装文档
  • vue 个人积累(使用工具,组件)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 爱情 北京女病人
  • 百度小程序遇到的问题
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 二维平面内的碰撞检测【一】
  • 工程优化暨babel升级小记
  • 项目管理碎碎念系列之一:干系人管理
  • 最近的计划
  • #if 1...#endif
  • #传输# #传输数据判断#
  • #考研#计算机文化知识1(局域网及网络互联)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (阿里云万网)-域名注册购买实名流程
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (六)激光线扫描-三维重建
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (三)uboot源码分析
  • (一) springboot详细介绍
  • (转)IOS中获取各种文件的目录路径的方法
  • (转)程序员技术练级攻略
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .md即markdown文件的基本常用编写语法
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 中 GetProcess 相关方法的性能
  • .netcore如何运行环境安装到Linux服务器
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @Autowired和@Resource的区别
  • @Import注解详解
  • [《百万宝贝》观后]To be or not to be?
  • [AIGC] 开源流程引擎哪个好,如何选型?