【Qt】06-对话框
对话框
- 前言
- 一、模态和非模态对话框
- 1.1 概念
- 1.2 模态对话框
- 1.2.1 代码
- QAction类
- 1.2.2 模态对话框运行分析
- 1.3 非模态对话框
- 1.3.1 代码
- 局部变量和成员变量
- setAttribute 类
- 1.3.2 现象解释
- 二、标准对话框
- 2.1 提示对话框 QMessageBox
- 2.1.1 现象及解释
- 2.2 问题对话框
- 2.2.1 现象解释
- 三、文件对话框
- 所有代码汇总
前言
一、模态和非模态对话框
1.1 概念
1)模态对话框
当它被显示时,会阻止用户与应用程序的其他部分进行交互,直到该对话框被关闭。用户必须先处理模态对话框,完成所需操作(如输入信息、选择选项或确认操作等),之后才能继续操作应用程序的其他部分。
它就像一个临时的交互模式,将用户的操作焦点强制限制在对话框内,其他部分处于不可用状态。
2)非模态对话框
非模态对话框允许用户在不关闭该对话框的情况下,继续与应用程序的其他部分进行交互。用户可以同时操作对话框和应用程序的其他部分,对话框不会限制用户对主程序的操作。
它可以提供辅助信息或持续的操作功能,不会独占用户的操作焦点。
比如:WPS中的一个查找和替换的对话框,你可以打开查找和替换对话框,输入查找和替换的内容,同时你还可以继续在主文档中滚动、编辑文本等操作。该对话框始终显示在屏幕上,你可以随时使用它,但也可以随时操作主界面,它不会强制中断你的主程序操作流程。
1.2 模态对话框
1.2.1 代码

mainwindow.cpp
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QMenuBar *mBar = menuBar();setMenuBar(mBar);QMenu *menu = mBar->addMenu("对话框");QAction *p1 = menu->addAction("模态对话框");connect(p1,&QAction::triggered,[=](){QDialog dialog;dialog.exec(); // 程序会运行到这里等待用户操作qDebug()<<"run this";});
}MainWindow::~MainWindow()
{}
QAction类
用于表示一个可执行的操作(action)。它在图形用户界面(GUI)编程中非常常用,尤其是在涉及菜单、工具栏和快捷键的场景中。
可以轻松地将这些操作与菜单项、工具栏按钮或快捷键绑定。
1.2.2 模态对话框运行分析

刚开始运行的界面

点击之后,进入槽函数

关闭对话框,即可出现

模态对话框会阻塞其父窗口的输入,直到对话框被关闭。用户必须先处理完对话框中的操作,才能继续操作父窗口。
1.3 非模态对话框
1.3.1 代码
在上一个的基础上add


这个是一个方法,就是改变变量的生存周期,另外一种就是动态分配空间。

升级版本
QDialog *p = new QDialog;p->setAttribute(Qt::WA_DeleteOnClose); // 当窗口或对话框关闭时,自动删除该对象。p->show();qDebug()<<"run this 2";

局部变量和成员变量
- 局部变量
局部变量是在函数或代码块内部定义的变量,它的作用域仅限于定义它的代码块。
- 局部变量的作用域仅限于其所在的代码块(如函数、循环、条件语句等)。在代码块外部无法访问局部变量。
- 局部变量的生命周期从变量被定义开始,到代码块结束时结束。当代码块执行完毕时,局部变量会被销毁,占用的内存也会被释放。
- 局部变量通常存储在**栈(stack)**中。
- 成员变量
成员变量是定义在类内部的变量,它是类的一部分,用于存储对象的状态信息。
- 成员变量的作用域是整个类,可以在类的任何成员函数中访问。成员变量也被称为类的属性或字段。
- 成员变量的生命周期与对象的生命周期一致。当对象被创建时,成员变量被初始化;当对象被销毁时,成员变量也会被销毁。
- 成员变量通常存储在**堆(heap)**中,与对象的其他部分一起分配内存。

setAttribute 类
用于设置对象的属性(attributes)。这些属性可以影响对象的行为或外观。setAttribute 是 QObject 类的一个成员函数,因此几乎所有 Qt 对象(如窗口、对话框、控件等)都可以使用它。
Qt 提供了许多预定义的属性,可以通过 Qt::WidgetAttribute 枚举来设置。
- Qt::WA_DeleteOnClose:当窗口或对话框关闭时,自动删除该对象。
- Qt::WA_QuitOnClose:当窗口关闭时,调用 QApplication::quit(),退出应用程序。
- Qt::WA_ShowModal:使窗口或对话框以模态方式显示(类似于 exec(),但不阻塞线程)。
- Qt::WA_TranslucentBackground:使窗口的背景透明。
- Qt::WA_TransparentForMouseEvents:使窗口对鼠标事件透明,鼠标事件会传递到窗口下方的控件。
1.3.2 现象解释
二者并存,不会被堵塞。

二、标准对话框
2.1 提示对话框 QMessageBox
添加这段代码

这里需要注意的事情是

2.1.1 现象及解释

对应的关系是,

2.2 问题对话框
查看返回值的枚举内容


添加代码

返回值的内容支持自己指定别的枚举里的内容

2.2.1 现象解释

三、文件对话框

选择了一个文件才会有文件路径显示出来,否则就不会有值被打印!
踩了点坑。。。。


如果需要指定打开文件的目标文件的类型,需要在后面添加

所有代码汇总
mainwindow.cpp
#include "mainwindow.h"
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QDialog>
#include <QDebug>
#include <QMessageBox>
#include <QFileDialog>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QMenuBar *mBar = menuBar();setMenuBar(mBar);QMenu *menu = mBar->addMenu("对话框");QAction *p1 = menu->addAction("模态对话框");connect(p1,&QAction::triggered,[=](){QDialog dialog;dialog.exec(); // 程序会运行到这里等待用户操作qDebug()<<"run this";});QAction *p2 = menu->addAction("非模态对话框");connect(p2,&QAction::triggered,[=](){
// QDialog dialog;
// dialog.show();QDialog *p = new QDialog;p->setAttribute(Qt::WA_DeleteOnClose); // 当窗口或对话框关闭时,自动删除该对象。p->show();qDebug()<<"run this 2";});QAction *p3 = menu->addAction("关于对话框");connect(p3,&QAction::triggered,[=](){QMessageBox::about(this,"about","关于qt");});QAction *p4 = menu->addAction("问题对话框");connect(p4,&QAction::triggered,[=](){int back = QMessageBox::question(this,"question","吃了吗?",QMessageBox::Ok,QMessageBox::Cancel);switch (back){case QMessageBox::Ok:qDebug() << "吃了";break;case QMessageBox::Cancel:qDebug() << "肚肚饿饿";break;default:break;}});QAction *p5 = menu->addAction("文件对话框");connect(p5,&QAction::triggered,[=](){
// QString FilePath = QFileDialog::getOpenFileName(this,"open","../");QString FilePath = QFileDialog::getOpenFileName(this,"open","../","source(*.cpp *.h);;Text(*txt);;all(*.*)");qDebug()<<"文件路径"<<FilePath;});
}MainWindow::~MainWindow()
{}
还有这句别忘记加了

相关文章:
【Qt】06-对话框
对话框 前言一、模态和非模态对话框1.1 概念1.2 模态对话框1.2.1 代码QAction类 1.2.2 模态对话框运行分析 1.3 非模态对话框1.3.1 代码局部变量和成员变量setAttribute 类 1.3.2 现象解释 二、标准对话框2.1 提示对话框 QMessageBox2.1.1 现象及解释 2.2 问题对话框2.2.1 现象…...
特征缩放:数据归一化
First,新年到了!感谢CSDN一路相伴,成为技术交流的温馨港湾。值此蛇年新春,祝平台人气蒸蒸日上,活动精彩纷呈,助力更多开发者突破技术瓶颈,在新的一年创造无限可能,新年快乐ÿ…...
Kubernetes 环境中的自动化运维实战指南
Kubernetes 作为容器编排领域的领导者,已经成为云原生应用的核心基础设施。然而,随着集群规模的扩大和应用的复杂化,手动运维 Kubernetes 集群变得愈发困难。自动化运维成为提升效率、保障系统稳定性的关键。本文将详细介绍如何在 Kubernetes 环境中实施自动化运维,涵盖工具…...
深入探讨Web应用开发:从前端到后端的全栈实践
在数字化时代,Web应用已成为连接用户与服务的关键桥梁。无论是电商平台、社交媒体,还是企业内部管理系统,Web应用都扮演着不可或缺的角色。本文将深入探讨Web应用开发的全栈实践,从前端的用户体验设计到后端的数据处理与存储&…...
分享|通过Self-Instruct框架将语言模型与自生成指令对齐
结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…...
扣子平台音频功能:让声音也能“智能”起来。扣子免费系列教程(14)
在数字化时代,音频内容的重要性不言而喻。无论是在线课程、有声读物,还是各种多媒体应用,音频都是传递信息、增强体验的关键元素。扣子平台的音频功能,为开发者和内容创作者提供了一个强大而灵活的工具,让音频的使用和…...
超分辨率体积重建实现术前前列腺MRI和大病理切片组织病理学图像的3D配准
摘要: 磁共振成像(MRI)在前列腺癌诊断和治疗中的应用正在迅速增加。然而,在MRI上识别癌症的存在和范围仍然具有挑战性,导致即使是专家放射科医生在检测结果上也存在高度变异性。提高MRI上的癌症检测能力对于减少这种变异性并最大化MRI的临床效用至关重要。迄今为止,这种改…...
C++并发编程指南03
文章目录 传递参数2.2.1 基本参数传递示例: 2.2.2 注意动态变量指针的传递错误示例:正确示例: 2.2.3 引用参数的传递错误示例:正确示例: 2.2.4 成员函数和对象指针的传递示例:带参数的成员函数示例…...
大数据Hadoop入门3
目录 第五部分(Apache Hive DML语句和函数使用) 1.课程内容大纲和学习目标 2.Hive SQL-DML-load加载数据操作 3.Hive SQL-DML-insert插入数据 4.Hive SQL-DML-select查询-语法书和环境准备 5.Hive SQL-DML-select查询-列表达式和distinct去重 6.Hi…...
Autosar-Os是怎么运行的?(多核系统运行)
写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 目录 1.Autosar多核操作系统 1.1多核启动过程 1.2多核运行过程 1.2.1核间任务同步 1.2.2Counte…...
【硬件介绍】三极管工作原理(图文+典型电路设计)
什么是三极管? 三极管,全称为双极型晶体三极管,是一种广泛应用于电子电路中的半导体器件。它是由三个掺杂不同的半导体材料区域组成的,这三个区域分别是发射极(E)、基极(B)和集电极&…...
MATLAB基础应用精讲-【数模应用】DBSCAN算法(附MATLAB和python代码实现)
目录 前言 几个高频面试题目 DBSCAN和传统聚类算法对比 算法原理 发展历程 主要事件 发展分析 什么是DBSCAN DBSCAN算法的聚类过程 DBSCAN算法的样本点组成 几个相关的概念: 算法思想 DBSCAN算法优缺点和改进 2.1 DBSCAN算法优缺点 2.2 DBSCAN算法改进 算法流…...
STM32 PWM驱动舵机
接线图: 这里将信号线连接到了开发板的PA1上 代码配置: 这里的PWM配置与呼吸灯一样,呼吸灯连接的是PA0引脚,输出比较单元用的是OC1通道,这里只需改为OC2通道即可。 完整代码: #include "servo.h&quo…...
基于Go语言的三甲医院人机与智能体协同环境系统(上.文章部分)
一、引言 1.1 研究背景与意义 1.1.1 三甲医院对高效协同系统的需求 三甲医院作为医疗体系的核心力量,承担着疑难病症诊治、医学科研教学等重要任务,其业务具有高度的复杂性。在日常运营中,三甲医院涉及多个科室,每个科室又包含众多专业领域,各科室之间需要紧密协作,共…...
对比DeepSeek、ChatGPT和Kimi的学术写作摘要能力
摘要 摘要是文章的精华,通常在200-250词左右。要包括研究的目的、方法、结果和结论。让AI工具作为某领域内资深的研究专家,编写摘要需要言简意赅,直接概括论文的核心,为读者提供快速了解的窗口。 下面我们使用DeepSeek、ChatGPT…...
「Unity3D」在Unity中使用C#控制显示Android的状态栏
Unity打包的Android默认都是全屏,如果想要在真机上显示状态栏,就需要额外设置,有两种方式: 第一种,使用Android的Java代码去控制,然后以插件的方式放到Unity中,被C#调用。第二种,使…...
Lua 环境的安装
1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…...
Pyside的QWebEngineProfile类
QWebEngineProfile 是 PySide/Qt 中用于管理浏览器引擎(WebEngine)配置的类,属于 QtWebEngineCore 模块。它主要用于控制网页的全局行为,例如缓存、Cookie、持久化存储、用户代理(User-Agent)、代理设置等。…...
java爬虫工具Jsoup学习
目录 前言 一、基本使用 二、爬取豆瓣电影的案例 三、Jsoup能做什么? 四、Jsoup相关概念 五、Jsoup获取文档 六、定位选择元素 七、获取数据 八、具体案例 前言 JSoup是一个用于处理HTML的Java库,它提供了一个非常方便类似于使用DOM࿰…...
基于SpringBoot电脑组装系统平台系统功能实现六
一、前言介绍: 1.1 项目摘要 随着科技的进步,计算机硬件技术日新月异,包括处理器(CPU)、主板、内存、显卡等关键部件的性能不断提升,为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…...
Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)
Java 基于 springboot 的校园选课小程序 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇&…...
洛谷P3884 [JLOI2009] 二叉树问题(详解)c++
题目链接:P3884 [JLOI2009] 二叉树问题 - 洛谷 | 计算机科学教育新生态 1.题目解析 1:从8走向6的最短路径,向根节点就是向上走,从8到1会经过三条边,向叶节点就是向下走,从1走到6需要经过两条边,…...
SQL99之内连接查询
SQL99是SQL语言的一个标准,于1999年发布。内连接查询是SQL中非常常用的一种查询方式,用于根据指定的条件从两个或多个表中获取相关联的数据。下面将详细介绍SQL99中的内连接查询,并以通熟易懂的语言进行讲解,同时给出代码例子、注…...
Qt Ribbon使用实例
采用SARibbon创建简单的ribbon界面 实例代码如下所示: 1、头文件: #pragma once #include <SARibbonBar.h> #include "SARibbonMainWindow.h" class QTextEdit; class SAProjectDemo1 : public SARibbonMainWindow { Q_OBJECT pub…...
【事务管理】
目录 一. 介绍与操作二. Spring事务管理三. 事务四大特性 \quad 一. 介绍与操作 \quad \quad 二. Spring事务管理 \quad 推荐加在经常进行增删改的方法上 \quad 三. 事务四大特性 \quad ctrlaltt...
[250129] Archinstall 3.0.2 发布 | Wolfram 语言与 Mathematica 14.2 版本发布
目录 Archinstall 3.0.2 版本发布Wolfram 语言与 Mathematica 14.2 版本发布🌟 主要亮点 Archinstall 3.0.2 版本发布 Archlinux 的自动化安装程序 Archinstall 发布了 3.0.2 版本,该版本带来了大量的改进和修复,以及一些新功能和贡献者。 …...
以创新芯片技术助力科技发展
在当今数字化与智能化浪潮中,芯片作为现代科技的核心,正悄然推动着各个行业的变革。厦门国科安芯科技有限公司专注于高性能芯片的研发与创新,致力于为工业、汽车和商业航天等领域提供高效、可靠的解决方案。以下是国科安芯推出的几款具有代表…...
单细胞-第五节 多样本数据分析,打分R包AUCell
文件在单细胞\5_GC_py\1_single_cell\3.AUCell.Rmd 1.基因 rm(list = ls()) load("g.Rdata")2.AUCell https://www.ncbi.nlm.nih.gov/pmc/articles/PMC9897923 IF: NA NA NA用这个文章里的方法,将单细胞亚群的marker基因与ros相关基因取交集,用作AUCell的基因集…...
详解:网站地图对快速收录的重要性
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/16.html 网站地图(Sitemap)在快速收录方面扮演着至关重要的角色。以下是对网站地图重要性的详细解析: 一、定义与功能 网站地图是一个包含网站上所有或…...
OSPF邻接关系无法建立之MTU问题
OSPF中路由器间从邻居到建立完全邻接需满足以下条件: 1、邻居之间网络通 2、建立邻接的接口不能为OSPF被动接口 3、两台路由器的HELLO时间间隔和DEAD时间间隔必须一致 4、两台路由器的router-id 必须不同 5、如果开了OSPF认证,认证方式和KEY必须一致 6、两台路由器建立…...
