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

QT系列教程(5) 模态对话框消息传递

模态对话框接受和拒绝消息

我们创建一个模态对话框,调用exec函数后可以根据其返回值进行不同的处理,exec的返回值有两种,Qt的官方文档记录的为

QDialog::Accepted
QDialog::Rejected

Accepted 表示接受消息, Rejected表示拒绝消息。
还是按照之前的操作,选择新建QT Application项目,然后创建类名为MainWindow, 基类选择QDialog, 点击创建生成Qt项目。然后我们添加设计师界面类,类名MyDialog, 基类选择QDialog。然后在这个mydialog.ui中添加两个按钮,一个是进入主界面,一个是退出程序。
https://cdn.llfc.club/1662194514279.jpg
在设计师界面点击Edit Signal/Slots 信号槽的按钮,进入信号槽编辑界面, 鼠标按住退出程序按钮不松开拖动,将另一端连接到MyDialog对话框,QPushbutton这边信号选择clicked(), MyDialog信号选择reject,这样就将两个信号连接起来了,我们点击退出程序按钮,会触发MyDialog发送reject信号,因为MyDialog调用exec后等待信号返回,此时收到reject信号,exec就会返回Rjected值。
同样道理,MyDialog发送accetp()信号后, exec返回值为Accepted。
https://cdn.llfc.club/1662194804759.jpg
我们点击Edit Widget 按钮, 然后右键点击键入主界面按钮,点击进入槽,在Qt 为我们生成的槽函数里添加accetp()信号发送逻辑

void MyDialog::on_pushButton_clicked()
{accept();
}

我们在main函数里调用对话框,然后根据返回值为Accepted,调用主窗口显示,否则直接退出

int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;MyDialog dialog;if(dialog.exec() == QDialog::Accepted){w.show();return a.exec();}else{return 0;}
}

运行后,我们点击进入主界面按钮,界面跳转至主界面,点击退出按钮程序退出。

主界面和登录界面切换

现在我们要实现主界面和登录界面的互相切换,我们刚才创建的对话框界面MyDialog界面是登录界面,主界面是MainWindow类。
我们在mainwindow.ui添加两个按钮,返回登录按钮和退出程序按钮, 再添加一个label表示这是主界面.
然后点击Edit Signal/Slot 进入信号编辑界面,点击退出程序按钮不松开拖动到尾部连接MainWindow的主界面上,选择退出程序的clicked()信号,MainWindow选择reject信号,将两个信号连接起来。
https://cdn.llfc.club/1662198287430.jpg
然后右击登录按钮转到槽,在槽函数里添加这个逻辑

void MainWindow::on_pushButton_clicked()
{close();MyDialog mydialog;if(mydialog.exec() == QDialog::Accepted ){this->show();}else{return;}
}

点击返回登陆按钮就会close主窗口,但是并不是真的关闭,只是将主窗口隐藏,Qt回收机制是所有窗口都关闭后才回收。
再次运行程序,点击进入主界面按钮就可以进入主界面,点击返回登录按钮就可以返回登录界面,可以实现两个界面的切换了。

总结

视频链接https://www.bilibili.com/video/BV1nY4y1K7cD/?spm_id_from=333.999.0.0&vd_source=8be9e83424c2ed2c9b2a3ed1d01385e9

源码链接https://gitee.com/secondtonone1/qt-learning-notes

相关文章:

  • C语言入门编程:开启编程之旅的探索与实践
  • dockers安装mysql
  • docker 快速搭建django项目环境(DockerFile)文件基础搭建
  • 408数据结构-图的存储与基本操作 自学知识点整理
  • 自学成才Flutter 弹性布局、线性布局
  • NFT Insider #132:Solana链上NFT销售总额达到55.49亿美元, The Sandbox成立DAO
  • 【并查集】专题练习
  • 复习leetcode第二题:两数相加
  • Pytorch入门需要达到的效果
  • 【教学类-60-01】彩色消划掉01(四个数字,X*Y宫格)
  • Linux - 文件管理高级1
  • 2.4 Docker部署JDK
  • 【三维模型采集设备】轮廓扫描仪介绍
  • TensorFlow Playground神经网络演示工具使用方法详解
  • golang中一个优雅的开发和使用命令行工具的库 cobra
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Asm.js的简单介绍
  • CSS 提示工具(Tooltip)
  • css的样式优先级
  • Date型的使用
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux中的硬链接与软链接
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql中InnoDB引擎中页的概念
  • Shadow DOM 内部构造及如何构建独立组件
  • 阿里研究院入选中国企业智库系统影响力榜
  • 代理模式
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 批量截取pdf文件
  • 什么是Javascript函数节流?
  • 王永庆:技术创新改变教育未来
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 7行Python代码的人脸识别
  • ionic入门之数据绑定显示-1
  • 移动端高清、多屏适配方案
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #13 yum、编译安装与sed命令的使用
  • #162 (Div. 2)
  • #ifdef 的技巧用法
  • #Ubuntu(修改root信息)
  • (06)金属布线——为半导体注入生命的连接
  • (1)bark-ml
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (八)Flink Join 连接
  • (分类)KNN算法- 参数调优
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (含笔试题)深度解析数据在内存中的存储
  • (三)elasticsearch 源码之启动流程分析
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Sublime Text3配置Lua运行环境
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net dataexcel winform控件 更新 日志