【Qt】对话框QDialog

文章目录

  • **对话框**QDialog
    • **基本概念**
    • 对话框分类
    • 标准对话框
    • 自定义消息框
      • 模态对话框
      • 非模态对话框
    • 案例:点击新建按钮弹出对话框
    • 消息对话框
    • 其它标准对话框

对话框QDialog

基本概念

对话框是 GUI 程序中不可或缺的组成部分。很多不能或者不适合放入主窗口的功能组件都必须放在对话框中设置。对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互


Qt 中使用QDialog类实现对话框,像主窗口一样,我们通常会设计一个类继承QDialog:

QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。

  • 顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置

对话框分类

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

  • 模态对话框:会阻塞同一应用程序中其它窗口的输入。比如:“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的
  • 非模态对话框:创建对话框后可以对其他窗口进行操作。例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑

标准对话框

标准对话框,是 Qt 内置的一系列对话框,比如有很多对话框都是通用的,比如打开文件、设置颜色、打印设置等

Qt 的内置对话框大致分为以下几类:

  • Q C o l o r D i a l o g QColorDialog QColorDialog: 选择颜色
  • Q F i l e D i a l o g QFileDialog QFileDialog: 选择文件或者目录
  • Q F o n t D i a l o g QFontDialog QFontDialog: 选择字体
  • Q I n p u t D i a l o g QInputDialog QInputDialog: 允许用户输入一个值,并将其值返回
  • Q M e s s a g e B o x QMessageBox QMessageBox: 模态对话框,用于显示信息、询问问题等
  • Q P a g e S e t u p D i a l o g QPageSetupDialog QPageSetupDialog: 为打印机提供纸张相关的选项
  • Q P r i n t D i a l o g QPrintDialog QPrintDialog: 打印机配置
  • Q P r i n t P r e v i e w D i a l o g QPrintPreviewDialog QPrintPreviewDialog:打印预览
  • Q P r o g r e s s D i a l o g QProgressDialog QProgressDialog: 显示操作过程

自定义消息框

Qt 支持模态对话框和非模态对话框:

  • 使用 Q D i a l o g : : e x e c ( ) QDialog::exec() QDialog::exec()实现应用程序级别的模态对话框
  • 使用 Q D i a l o g : : o p e n ( ) QDialog::open() QDialog::open()实现窗口级别的模态对话框
  • 使用 Q D i a l o g : : s h o w ( ) QDialog::show() QDialog::show()实现非模态对话框

模态对话框

应用程序级别的模态 => 默认的方式

当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口

窗口级别的模态

该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。窗口级别的模态尤其适用于多窗口模式


例子:

QDialog dialog;
dialog.setWindowTitle(tr("Hello, dialog!"));
dialog.exec();

调用了exec()将对话框显示出来,当对话框出现时,我们不能与主窗口进行任何交互,直到我们关闭了该对话框,这是一个模态对话框


非模态对话框

QDialog dialog(this);
dialog.setWindowTitle(tr("Hello, dialog!"));
dialog.show();//将exec()修改为show()

现象:对话框竟然一闪而过,因为show()函数不会阻塞当前线程,对话框会显示出来,然后函数立即返回,代码继续执行

注意:此时dialog 是建立在栈上的,dialog 超出作用域被析构,因此对话框消失了,将 dialog 改成堆上建立,当然就没有这个问题了

QDialog *dialog = new QDialog(this);
dialog->setWindowTitle(tr("Hello, dialog!"));
dialog->show();

此时仍有一个问题:此时是将对话框设置到对象树上,但是如果对内存占用有严格限制的话,当我们将主窗口作为 parent 时,主窗口不关闭,对话框就不会被销毁,所以会一直占用内存

解决办法:setAttribute()函数设置对话框关闭时,自动销毁对话框。

dialog->setAttribute(Qt::WA_DeleteOnClose);

案例:点击新建按钮弹出对话框

ui界面如下

image-20231004193213355

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//案例:点击新建按钮=>弹出对话框connect(ui->actionNew,&QAction::triggered,[=](){//case1:创建模态对话框/*QDialog dlg(this);dlg.resize(200,100);//调整对话框大小dlg.exec();//阻塞 此时不可以对其它窗口进行操作qDebug() <<"模态对话框弹出";//关闭了对话框才会输出这句话*///case2:创建非模态对话框QDialog* dlg = new QDialog(this);dlg->resize(100,200);dlg->show();dlg->setAttribute(Qt::WA_DeleteOnClose);qDebug() <<"非模态对话框弹出";});
}

注意:为什么窗口模态对话框的时候,QDialog对象在栈上创建,而创建非模态对话框的时候在堆上创建?

  • 因为模态对话框会阻塞当前其它窗口操作,只有当前对话框关闭了才能操作其它窗口,所以该局部变量在对话框关闭前始终有效
  • 而非模态对话框不会阻塞当前其它窗口操作,如果dialog对象是建立在栈上的,dialog 超出作用域被析构,因此对话框消失了,所以要将 dialog 改成堆上建立

创建非模态对话框细节处:因为当前这个对象是new出来的,交给对象树,该对象在窗口关闭的时候才会释放,如果有人不断的点击新建按钮,然后又关闭,每次都会创建一个新对象,可能导致内存泄漏,所以需要设置55号属性 Q t : : W A D e l e t e O n C l o s e Qt::WA_DeleteOnClose Qt::WADeleteOnClose =>在关闭对话框的时候就把对象释放掉


消息对话框

使用上述点击新建按钮,触发不同的反应:

错误对话框 =>本质是 模态对话框

QMessageBox::critical(this,"critical","错误");

image-20231004194037552

消息对话框

 QMessageBox::information(this,"info","信息");

image-20231004194127789

提问对话框

//参数1:父亲指针  参数2:对话框的标题  参数3:提示内容  参数4:关联的按键类型=>使用|运算指定对话框应该出现的按钮
//参数5:指定默认选择的按钮
if (QMessageBox::Save  ==  QMessageBox::question(this,"ques","提问",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel))
{//该函数的返回值就是按键类型qDebug() << "选择的是保存";}
else
{qDebug() << "选择的是取消";
}

image-20231004194302336


警告对话框

QMessageBox::warning(this,"warning","警告");

image-20231004194341839


其它标准对话框

颜色对话框

QColor color =  QColorDialog::getColor(QColor(255,0,0));
qDebug() << "r = " << color.red() << " g = " << color.green() << " b  = " << color.blue() ;//输出选择颜色的RGB

image-20231004194459806


文件对话框

//文件对话框  参数 1:父亲指针  参数2:标题   参数3:默认打开路径  参数4:需要过滤文件格式,只要该格式的文件 =>该参数可以省略
//返回值是 选取的文件的路径
QString str = QFileDialog::getOpenFileName(this,"打开文件","Z:","(*.txt)");
qDebug() << str;

image-20231004194713815


字体对话框

bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36)); //默认设置字体为华文彩云 36号字体
//QString转为char*的方法:  toUtf8().data()
qDebug() << "字体:" << font.family().toUtf8().data() << " 字号 "<< font.pointSize() << " 是否加粗"<< font.bold() << " 是否倾斜"<<font.italic();

image-20231004194805323


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm2020无法打开,点击无反应

pycharm 2020 无法打开&#xff0c;点击无反应&#xff0c;今天我碰到这现象&#xff0c;总结大体原因 C:\Users\ygw\AppData\Roaming\JetBrains &#xff08;删除该目录即可&#xff0c;一般由于升级安装 或 安装两个不同版本 会存在老旧文件影响导致&#xff09;

SpringSecurity + jwt + vue2 实现权限管理 , 前端Cookie.set() 设置jwt token无效问题(已解决)

问题描述 今天也是日常写程序的一天 , 还是那个熟悉的IDEA , 还是那个熟悉的Chrome浏览器 , 还是那个熟悉的网站 , 当我准备登录系统进行登录的时候 , 发现会直接重定向到登录页 , 后端也没有报错 , 前端也没有报错 , 于是我得脸上又多了一张痛苦面具 , 紧接着在前端疯狂debug…

dpdk/spdk/网络协议栈/存储/网关开发/网络安全/虚拟化/ 0vS/TRex/dpvs技术专家成长体系教程

课程围绕安全&#xff0c;网络&#xff0c;存储&#xff0c;云原生4个维度去讲解核心技术点。 6个专栏组成&#xff1a;dpdk网络专栏、存储技术专栏、安全与网关开发专栏、虚拟化与云原生专栏、测试工具专栏、性能测试专栏 一、dpdk网络 dpdk基础知识 多队列网卡&#xff0…

采集EtherNET/IP转Profinet在西门子plc中的应用

远创智控网关YC-EIPM-PN&#xff0c;让你的设备和云平台实时连接&#xff01; 远创智控YC-EIPM-PN网关产品支持各种数据接口&#xff0c;无论是工业领域的仪表、PLC、计量设备&#xff0c;还是设备数据&#xff0c;都能实时采集并整合。它将这些设备中的运行数据、状态数据等信…

学习pytorch13 神经网络-搭建小实战Sequential的使用

神经网络-搭建小实战&Sequential的使用 官网模型结构根据模型结构和数据的输入shape&#xff0c;计算用在模型中的超参数coderunning log网络结构可视化 B站小土堆pytorch视频学习 官网 https://pytorch.org/docs/stable/generated/torch.nn.Sequential.html#torch.nn.Se…

布朗大学发现GPT-4存在新问题,可通过非常见语言绕过限制

&#x1f989; AI新闻 &#x1f680; 布朗大学发现GPT-4存在新漏洞&#xff0c;可通过非常见语言绕过限制 摘要&#xff1a;布朗大学计算机科学研究人员发现了OpenAI的GPT-4存在新漏洞&#xff0c;利用不太常见的语言如祖鲁语和盖尔语可以绕过各种限制。研究人员测试了GPT-4对…

gitlab docker部署,备份,恢复。附踩坑记录

本次安装在CentOS7下进行 1、安装yum 检查是否已经安装yum yum --version如果未安装 sudo yum install -y yum-utils添加镜像源&#xff1a; 国外镜像源&#xff1a;yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo阿里镜像源&am…

最新AI创作系统ChatGPT源码+详细搭建部署教程,支持AI绘画/支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

AOMEI PXE Boot Free

两台电脑网线直连&#xff0c;不用设置固定IP&#xff0c;该软件包含DHCP。 名称: 3H3AOMEIPXEBootFree.rar 大小: 13068734 字节 (12 MiB) SHA1: 1e606c8c1ee3badf8af9a87f61fdf2e332b773e6 名称: PXEBoot.exe 大小: 13124928 字节 (12 MiB) SHA1: 95286ac18e9b81c2a68412c40…

代理IP在保护跨境商家网络安全中的重要作用

在当前全球化的背景下&#xff0c;跨境电商成为一种重要的商业模式&#xff0c;越来越多的商家涌入国际市场&#xff0c;商家们通过互联网平台将商品远销国外&#xff0c;但网络安全风险随之而来。跨境商家因为需要处理大量的在线交易和产品数据&#xff0c;如果未能对这些敏感…

day27--AJAX(bootstrap之modal,toast;接口文档的一些用法;AJAX原理)

目录 Bootstrap之Modal&#xff1a; 显示和隐藏方法 通过自定义属性&#xff1a; 使用JS来控制弹框&#xff1a; Bootstrap之Toast&#xff1a; 接口文档一些用法&#xff1a; 删除图书&#xff1a; 图片上传&#xff1a; 图片上传步骤&#xff1a; 修改头像&#xf…

CVE-2017-15715 apache换行解析文件上传漏洞

影响范围 httpd 2.4.0~2.4.29 复现环境 vulhub/httpd/CVE-2017-15715 docker-compose 漏洞原理 在apache2的配置文件&#xff1a; /etc/apache2/conf-available/docker-php.conf 中&#xff0c;php的文件匹配以正则形式表达 ".php$"的正则匹配模式意味着以.ph…

基于Effect的组件设计 | 京东云技术团队

Effect的概念起源 从输入输出的角度理解Effect https://link.excalidraw.com/p/readonly/KXAy7d2DlnkM8X1yps6L 编程中的Effect起源于函数式编程中纯函数的概念 纯函数是指在相同的输入下&#xff0c;总是产生相同的输出&#xff0c;并且没有任何副作用(side effect)的函数。…

flutter 开发中的问题与技巧

一、概述 刚开始上手 flutter 开发的时候&#xff0c;总会遇到这样那样的小问题&#xff0c;而官方文档又没有明确说明不能这样使用&#xff0c;本文总结了一些开发中经常会遇到的一些问题和一些开发小技巧。 二、常见问题 1、Expanded 组件只能在 Row、Column、Flex 中使用 C…

缓存设计的创新之旅:架构的灵魂之一

缓存在架构设计中占有重要地位。缓存在提升性能中也扮演重要的角色。常见的有对资源的缓存&#xff0c;比如数据库连接池、http连接池&#xff0c;还有对数据的缓存等。缓存的设计可复杂也可简单&#xff0c;但是需要考虑的点却很多。 缓存对象 设计缓存的时候一定要考虑的是&…

行业追踪,2023-10-13

自动复盘 2023-10-13 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

3D 生成重建007-Fantasia3D和Magic3d两阶段玩转文生3D

3D生成重建3D 生成重建007-Fantasia3D和magic3d 文章目录 0 论文工作1 论文方法1.1 magic3d1.2 Fantasia3D 2 效果2.1 magic3d2.2 fantasia3d 0 论文工作 两篇论文都是两阶段法进行文生3d&#xff0c;其中fantasia3D主要对形状和外表进行解耦&#xff0c;然后先对geometry进行…

微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化

文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称&#xff08;RequestOriginParser默认解析都为default&#xff09;&#xff0c;所以我们要自定义一个实现类&#xff08;根据请求头解析&#xff0c…

springcloud笔记(7)-限流降级Sentinel

官方文档&#xff1a;概述 | Spring Cloud Alibaba basic-api-resource-rule | Sentinel (sentinelguard.io) Sentinel是SpringCloudAlibaba的组件。 sentinel的功能 introduction | Sentinel 流量控制 熔断降级&#xff1a;降低调用链路中的不稳定资源 系统负载保护&am…

private key ssh连接服务器

这里用到的软件是PuTTY。 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 保存本地rsa文件后&#xff0c;打开软件PuTTYgen&#xff0c;点击Load导入文件&#xff0c;输入Key passphrase即密码&#xff0c;保存至本地。 随后在PuTTY配置ssh的用户名 来Cred…