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

Qt(模态对话框的切换)

目录

模态对话框:

信号和槽函数:

示例:

子界面:

主界面:

主函数:

exec():

hide()和close():

accept()和reject():


模态对话框:

https://blog.csdn.net/HMBBLOVEPDX/article/details/151903050?spm=1001.2014.3001.5501

信号和槽函数:

https://blog.csdn.net/HMBBLOVEPDX/article/details/151928089?spm=1001.2014.3001.5501

示例:

子界面:

#ifndef CHILDDIALOG_H
#define CHILDDIALOG_H#include <QDialog>namespace Ui {
class ChildDialog;
}class ChildDialog : public QDialog
{Q_OBJECTpublic:explicit ChildDialog(QWidget *parent = nullptr);~ChildDialog();private slots:void on_pushButton_clicked();private:Ui::ChildDialog *ui;
};#endif // CHILDDIALOG_H
#include "childdialog.h"
#include "ui_childdialog.h"ChildDialog::ChildDialog(QWidget *parent): QDialog(parent), ui(new Ui::ChildDialog)
{ui->setupUi(this);
}ChildDialog::~ChildDialog()
{delete ui;
}void ChildDialog::on_pushButton_clicked()
{accept();
}

主界面:

#ifndef MAINDIALOG_H
#define MAINDIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE
namespace Ui {
class MainDialog;
}
QT_END_NAMESPACEclass MainDialog : public QDialog
{Q_OBJECTpublic:MainDialog(QWidget *parent = nullptr);~MainDialog();private slots:void on_pushButton_clicked();private:Ui::MainDialog *ui;
};
#endif // MAINDIALOG_H
#include "maindialog.h"
#include "ui_maindialog.h"
#include <QDebug>
#include "ChildDialog.h"MainDialog::MainDialog(QWidget *parent): QDialog(parent), ui(new Ui::MainDialog)
{ui->setupUi(this);
}MainDialog::~MainDialog()
{delete ui;
}void MainDialog::on_pushButton_clicked()
{close();ChildDialog childDialog;if(childDialog.exec()==QDialog::Accepted){qDebug()<<"点击了切换到主界面";this->show();}else{qDebug()<<"退出";return;}
}

主函数:

#include "maindialog.h"#include <QApplication>
#include "ChildDialog.h"
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainDialog w;ChildDialog childDialog;if(childDialog.exec()==QDialog::Accepted){qDebug()<<"点击了切换到主界面";childDialog.hide();w.show();}else{qDebug()<<"退出";return 0;}return a.exec();
}

exec():

exec()函数是QDialog类及其子类的核心成员函数,用于以模态方式显示对话框。调用exec()时,会启动一个局部事件循环,阻塞对话框之外的其他窗口的访问,直到对话框被关闭。该函数返回值为QDialog::DialogCode枚举值,enum DialogCode { Rejected, Accepted };Rejected值为0,Accepted值为1。仅当对话框以模态方式(exec())显示时‌,reject()才会通过返回值(QDialog::Rejected)影响上层逻辑;若使用show()reject()仅关闭窗口,不传递返回值。

exec()函数内部实现包含以下关键步骤:

‌自动显示对话框‌:exec()内部首先调用show()方法显示对话框,无需开发者显式调用。

‌启动事件循环‌:创建一个局部QEventLoop对象来阻塞当前线程。

‌处理事件队列‌:循环执行已排队任务,类似于while(1)嵌套结构,但不会导致界面卡死。

‌返回关闭状态‌:对话框关闭后返回结果值,事件循环终止。

hide()和close():

hide()‌:仅隐藏窗口(setVisible(false)),不触发关闭事件,窗口对象仍驻留内存且保留所有状态。

close()‌:关闭窗口并释放资源(若设置Qt::WA_DeleteOnClose则销毁对象),默认行为等同于hide(),但可通过重写closeEvent()拦截。

hide()‌:窗口可随时通过show()重新显示,适用于需频繁切换可见性的场景(如后台悬浮窗)。

close()‌:若未设置自动销毁属性,窗口资源可能泄漏;若设置,则对象不可复用。

hide()‌:仅触发hideEvent(),不涉及关闭逻辑。

close()‌:触发closeEvent(),可被重写以实现保存数据等操作。

保留状态‌:需临时隐藏窗口(如设置面板)时用hide()

‌彻底释放‌:需销毁窗口(如退出对话框)时用close(),并配合Qt::WA_DeleteOnClose属性。

accept()和reject():

accept()表示用户确认操作(如点击“确定”按钮),隐藏对话框并返回QDialog::Accepted状态码(值为1)。

reject()表示用户取消操作(如点击“取消”按钮),隐藏对话框并返回QDialog::Rejected状态码(值为0)。

函数行为适用场景
accept()隐藏对话框,返回Accepted,触发accepted()信号用户明确确认操作(如保存设置)
reject()隐藏对话框,返回Rejected,触发rejected()信号用户取消操作(如放弃编辑)
close()发送QCloseEvent,默认调用hide(),可拦截事件需自定义关闭逻辑(如提示保存)
hide()仅隐藏窗口,不改变状态码临时隐藏窗口(如最小化)
http://www.dtcms.com/a/394528.html

相关文章:

  • QT-模型视图结构
  • C语言 C语句
  • 《理解Reactor网络编程模型》
  • Mirror Maze 镜面反射
  • 一个案例弄懂nfs
  • 在飞牛NAS使用Lucky做动态解析到域名?
  • 多实例 MySQL 部署
  • 使用批处理脚本快速切换 Claude API 实现多平台环境配置
  • SkyDiffusion:用 BEV 视角打开街景→航拍图像合成新范式
  • 免费下载适用于 Windows PC 的 Pixologic Zbrush 2026
  • 10.eNSP下载及安装教程(2025年9月21日)
  • Qt 实战 之 打包部署
  • QT-文件
  • 2001-2022年全国地级市高铁开通数据
  • TenstoRT加速YOLOv11——C++端加速
  • 面试技巧第三篇:嵌入式操作系统基础考点:任务、调度和中断
  • 简单使用Vanna
  • 【面板数据】各省环境保护支出统计数据集(2007-2023年)
  • 无需格式转换!FileOptimizer将文件体积压至极致的软件
  • 【论文速递】2025年第17周(Apr-20-26)(Robotics/Embodied AI/LLM)
  • Spring Framework 入门:传统 XML 配置启动方式详解
  • 构建AI智能体:四十、K-Means++与RAG的融合创新:智能聚类与检索增强生成的深度应用
  • Python 中,判断元素是否存在于列表(list)和判断键是否存在于字典(dict)
  • 如何在 Windows 上恢复已删除/未保存的 PowerPoint 文件 - 4 种快速方法
  • 【含文档+PPT+源码】基于过滤协同算法的城市旅游网站的设计与实现
  • week 2
  • Core Animation基础
  • OpenVLC解析
  • 【AI论文】ScaleCUA:借助跨平台数据扩展开源计算机使用代理(系统/工具)规模
  • NW951NW916美光固态闪存NW926NW927