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

accept() reject() hide()

1. accept()

用途

确认操作:表示用户完成了对话框的交互并确认了操作(如点击“确定”按钮)。
关闭模态对话框:结束 exec() 的事件循环,返回 QDialog::Accepted 结果码。

适用场景

模态对话框(通过 exec() 显示):

void SettingsDialog::on_btnOK_clicked() {// 保存数据或应用设置accept(); // 关闭对话框,返回 Accepted
}

结果处理:

if (dialog.exec() == QDialog::Accepted) {// 处理用户确认后的逻辑
}

行为

隐藏对话框,设置结果码为 Accepted。
不会销毁对话框对象(除非设置了 Qt::WA_DeleteOnClose)。

2. reject()

用途

取消操作:表示用户取消了对话框的交互(如点击“取消”按钮或关闭窗口)。
关闭模态对话框:结束 exec() 的事件循环,返回 QDialog::Rejected 结果码。

适用场景

模态对话框(通过 exec() 显示):
void SettingsDialog::on_btnCancel_clicked() {reject(); // 关闭对话框,返回 Rejected
}

结果处理:

if (dialog.exec() == QDialog::Rejected) {// 处理用户取消后的逻辑
}

行为

隐藏对话框,设置结果码为 Rejected。
不会销毁对话框对象(除非设置了 Qt::WA_DeleteOnClose)。

3. hide()

用途

隐藏窗口:仅隐藏对话框,不关闭或销毁对象,允许后续重复显示。
非模态对话框:适用于需要异步交互的场景,允许用户同时操作主窗口和对话框。

适用场景

非模态对话框(通过 show() 显示):
void SettingsDialog::on_btnOK_clicked() {// 发射信号传递数据emit settingsApplied(enable, mode);hide(); // 隐藏对话框,不销毁对象
}

临时隐藏窗口:

m_settingsDialog->hide(); // 隐藏后可通过 show() 重新显示

行为

仅隐藏窗口,不触发 closeEvent,不设置结果码。
对象保持活跃状态,可重复调用 show() 显示。

对比总结
方法 适用场景 结果码 窗口状态 对象生命周期
accept() 模态对话框确认操作 Accepted 隐藏 保持存在(默认)
reject() 模态对话框取消操作 Rejected 隐藏 保持存在(默认)
hide() 非模态对话框 无 隐藏 保持存在

代码示例

模态对话框(使用 accept()/reject())

// 模态对话框的确认和取消逻辑
void SettingsDialog::on_btnOK_clicked() {// 保存设置...accept(); // 关闭并返回 Accepted
}void SettingsDialog::on_btnCancel_clicked() {reject(); // 关闭并返回 Rejected
}// 主窗口调用
void MainWindow::onOpenSettings() {SettingsDialog dialog(this);if (dialog.exec() == QDialog::Accepted) {// 处理确认后的数据}
}

非模态对话框(使用 hide())

// 非模态对话框的确认逻辑
void SettingsDialog::on_btnOK_clicked() {// 发射信号传递数据emit settingsApplied(enable, mode);hide(); // 隐藏窗口,保持对象存在
}// 主窗口调用
void MainWindow::onOpenSettings() {if (!m_settingsDialog) {m_settingsDialog = new SettingsDialog(this);connect(m_settingsDialog, &SettingsDialog::settingsApplied, this, &MainWindow::onSettingsConfirmed);}m_settingsDialog->show(); // 显示窗口
}

注意事项

对象生命周期若对话框设置为 Qt::WA_DeleteOnClose,调用 accept() 或 reject() 会销毁对象。非模态对话框应避免设置此属性,以重复使用实例。信号与槽
非模态对话框应通过信号传递数据,而非依赖返回值:
connect(m_settingsDialog, &SettingsDialog::settingsApplied, this, &MainWindow::updateSettings);

窗口关闭确认
可在 closeEvent 中统一处理关闭逻辑:

void SettingsDialog::closeEvent(QCloseEvent *event) {if (needConfirmClose) {QMessageBox::question(...); // 弹出确认对话框}event->accept(); // 或 event->ignore()
}

通过合理选择 accept()、reject() 和 hide(),可以精确控制对话框的交互逻辑,确保用户体验和代码健壮性。

http://www.dtcms.com/a/173928.html

相关文章:

  • Select Rows组件研究
  • 使用Java和LangChain4j实现人工智能:从分类到生成式AI
  • stm32之输出比较OC和输入捕获IC
  • SQLite数据类型
  • Class AB OPA corner 仿真,有些corenr相位从0开始
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十一讲)
  • 人工智能100问☞第15问:人工智能的常见分类方式有哪些?
  • 2025年软件工程与数据挖掘国际会议(SEDM 2025)
  • Three.js和WebGL区别、应用建议
  • 大模型在宫颈癌诊疗全流程预测与应用研究报告
  • 【免费试用】LattePanda Mu x86 计算模块套件,专为嵌入式开发、边缘计算与 AI 模型部署设计
  • [论文阅读]MCP Guardian: A Security-First Layer for Safeguarding MCP-Based AI System
  • VMware搭建ubuntu保姆级教程
  • NGINX `ngx_http_browser_module` 深度解析与实战
  • 数据中台架构设计
  • 分布式开发:数字时代的高性能架构革命-为什么要用分布式?优雅草卓伊凡
  • IP-Adapter
  • Caffeine快速入门
  • R语言助力森林生态研究:从数据处理到群落稳定性分析的完整流程,结合机器学习与案例写作
  • Kali Linux 安装 Rust 环境简明教程
  • js获取uniapp获取webview内容高度
  • 从零实战:在Xilinx Zynq PS端移植VxWorks 6.9系统
  • uniapp 全局混入:监听路由变化,路由变化即执行
  • oceanbase不兼容SqlSugarCore的问题
  • 【25软考网工】第五章(7)路由协议、静态与默认路由、路由协议分类
  • 电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择-耀圣
  • AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」
  • 如何建设网站?网站建设简单步骤有哪些?
  • Webpack 5 Module Federation 深度解析
  • k8s术语之service