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

【Qt】对话框

文章目录

  • 1 :peach:对话框介绍:peach:
  • 2 :peach:对话框的分类:peach:
    • 2.1 :apple:模态对话框:apple:
    • 2.2 :apple:非模态对话框:apple:
    • 2.3 :apple:混合属性对话框:apple:
  • 3 :peach:Qt 内置对话框:peach:
    • 3.1 :apple:消息对话框 QMessageBox:apple:


1 🍑对话框介绍🍑

对话框是 GUI 程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中。对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互。Qt常⽤的内置对话框有:QFiledialog(⽂件对话框)、QColorDialog(颜⾊对话框)、QFontDialog(字体对话框)、QInputDialog (输⼊对话框)和 QMessageBox(消息框) 。


2 🍑对话框的分类🍑

对话框分为 模态对话框非模态 对话框。

2.1 🍎模态对话框🍎

模态对话框指的是:显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框。使⽤ QDialog::exec() 函数 调⽤。模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等。

代码示例:
在这里插入图片描述
验证:
在这里插入图片描述
此时如果我们在未关闭该对话框的话就不能够去点击父窗口相关的控件了。

2.2 🍎非模态对话框🍎

⾮模态对话框显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种非阻塞式对话框,使⽤QDialog::show()函数调⽤。⾮模态对话框⼀般在堆上创建,这是因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过。同时还需要设置 Qt:WA_DeleteOnClose 属性,⽬的是:当创建多个⾮模态对话框时(如打开了多个⾮模态窗⼝),为了避免内存泄漏要设置此属性。⾮模态对话框适⽤于特殊功能设置的场合,⽐如查找操作,属性设置等。

代码示例:
在这里插入图片描述

验证:
在这里插入图片描述
此时在关闭对话框前我们可以还打开很多个对话框。代码中我们还设置了Qt:WA_DeleteOnClose属性来防止内存泄漏,大家此时可能会有疑问,我们不是将对话框加入到了MainWindow的对象树里面去了吗?MainWindow销毁时这些对话框不就会自动销毁吗?按道理这样是没错,但是在MainWindow未退出前,如果创建了非常多的对话框,此时可能会造成大量空间浪费,所以使用Qt:WA_DeleteOnClose属性后当我们点击对话框右上角的X后就会被自动回收。

2.3 🍎混合属性对话框🍎

混合属性对话框同时具有模态对话框和⾮模态对话框的属性,对话框的⽣成和销毁具有⾮模态对话框属性,功能上具有模态对话框的属性。使⽤ QDialog::setModal() 函数 可以创建混合特性的对话框。通常,创建对话框时需要指定对话框的⽗组件。

代码示例:
在这里插入图片描述
效果就跟模态对话框一致。


3 🍑Qt 内置对话框🍑

Qt 提供了多种可复⽤的对话框类型,即 Qt 标准对话框。Qt 标准对话框全部继承于 QDialog 类。常⽤标准对话框如下:

在这里插入图片描述

3.1 🍎消息对话框 QMessageBox🍎

消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进⾏选择操作。QMessageBox类 中定义了静态成员函数,可以直接调⽤创建不同⻛格的消息对话框,其中包括:
在这里插入图片描述

我这里就只演示Critical风格的消息对话框,其他的也同理:
代码示例:
在这里插入图片描述
结果验证:
在这里插入图片描述
除了使用上面的方式外,QMessageBox中还内置了一些静态的成员函数:
在这里插入图片描述

使用这些函数我们可以更加方便的创建一些简单的消息对话框,比如上面的代码我们还可以这样写:

QMessageBox::critical(this,"消息对话框","警告、警告!!!",QMessageBox::No,QMessageBox::Close);

同样的也能够完成上述的工作。

但是如果我们想要将自定义的按钮添加到消息对话框里面应该怎么办呢?我们刻意使用addButton来进行添加:
在这里插入图片描述
结果验证:
在这里插入图片描述
在一些更加复杂的业务处理中我们还可以将该按钮添加一个槽函数使用connect连接即可。

那假如我们想要知道用户点击的是哪一个按钮呢?
其实exec函数(注意show函数是没有返回值的)的返回值就可以拿到:

    QPushButton* button=new QPushButton(this);button->setText("kill all");message->addButton(button,QMessageBox::AcceptRole);int t=message->exec();if(t == QMessageBox::No)qDebug()<<"No";else if(t == QMessageBox::Yes)qDebug()<<"Yes";elseqDebug()<<"Other";

在这里插入图片描述

http://www.lryc.cn/news/361128.html

相关文章:

  • Python | 武理刷题
  • 如何设置让背景颜色不包括 padding 部分,顺带全面学习 background-clip 属性(可以实现文字渐变)
  • Oracle 序列-SEQUENCE
  • 8岁儿童学编程基础好吗:探索早期编程教育的利与弊
  • vue3加axios配合element-plus实现图片等文件本地上传,并获取服务器返回的真实地址数据,前端写法
  • 面试题:谈谈你对观察者和订阅发布的理解
  • 下载文件流
  • 有开源软件,也有开源硬件?
  • 【TensorFlow深度学习】卷积层变种与深度残差网络原理
  • 每日一题《leetcode-- LCR 025.两数相加||》
  • MySQL数据库的约束
  • 计算机毕业设计 | springboot+vue会议室管理系统(附源码)
  • 常见端口及其脆弱点
  • JS函数的进阶
  • 【UE+GIS】UE5GIS CAD或shp构建3D地形
  • Unity学习笔记---音视频播放
  • 项目集成过程中的makefile记录
  • Vue3 -Computed计算属性
  • MySQL—函数—日期函数(基础)
  • Java+SVNCloud+Mysql课程设计
  • MySQL之创建高性能的索引(四)
  • Python 限制输入数的范围
  • STM32两轮平衡小车原理详解
  • (笔记)如何评价一个数仓的好坏
  • 友善RK3399v2平台利用rkmpp实现硬件编解码加速
  • Mysql 8.0 主从复制及读写分离搭建记录
  • PyTorch、显卡、CUDA 和 cuDNN 之间的关系
  • Lambda 表达式练习
  • JavaScript第七讲:数组,及练习题
  • 从docker镜像反推Dockerfile