当前位置: 首页 > 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(),可以精确控制对话框的交互逻辑,确保用户体验和代码健壮性。

相关文章:

  • 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 环境简明教程
  • 江苏省泰州市委常委、宣传部部长刘霞接受审查调查
  • 印观察|印巴战火与莫迪政府三重冒险:南亚火药桶已至临界点
  • 金融监管总局:正在修订并购贷款管理办法,将进一步释放并购贷款的潜力
  • 李云泽:将加快出台与房地产发展新模式相适配的系列融资制度
  • 这个部位最容易变老,却被很多姑娘忽视了
  • 五一假期上海境外来沪消费4.55亿元,同比增长211.6%