【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 现象…...
AI学习指南Ollama篇-使用Ollama构建自己的私有化知识库
一、引言 (一)背景介绍 随着企业对数据隐私和效率的重视,私有化知识库的需求日益增长。私有化知识库不仅可以保护企业数据的安全性,还能提供高效的知识管理和问答系统,提升企业内部的工作效率和创新能力。 (二)Ollama和AnythingLLM的结合 Ollama和AnythingLLM的结合…...
2.策略模式(Strategy)
定义 定义一系列算法,把它们一个个封装起来,并且使他们可互相替换(变化)。该模式使算法可独立于使用它的客户程序(稳定)而变化(拓展,子类化)。 动机(Motiva…...
Python里的小整数问题挺有意思的
简单来说,Python为了优化性能,会把一些常用的整数(通常是-5到256)提前创建好,放到一个“缓存池”里。这样,当你用到这些小整数时,Python就不用每次都重新创建对象了,直接从缓存池里拿…...
开源智慧园区管理系统对比五款主流产品探索智能运营新模式
内容概要 在这个数字化迅速发展的时代,园区管理也迎来了全新的机遇和挑战。众所周知,开源智慧园区管理系统作为一种创新解决方案,正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整,也为用户提供…...
正则表达式入门
入门 1、提取文章中所有的英文单词 //1.先创建一个Pattern对象,模式对象,可以理解成就是一个正则表达式对象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2.创建一个匹配器对象 //理解:就是 matcher匹配器按照p…...
hive:数据导入,数据导出,加载数据到Hive,复制表结构
hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具,主要用于批处理和大数据分析,而不是为OLTP(在线事务处理)操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…...
【某大厂一面】HashSet底层怎么实现的
HashSet 是 Java 集合框架中的一个非常常用的集合类,它实现了 Set 接口,并且底层通常是通过 哈希表(HashMap)来实现的。要理解 HashSet 的底层实现,我们需要从哈希表的工作原理开始讲起。下面是对 HashSet 底层实现的详…...
动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践
利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...
免杀国内主流杀软的恶意样本分析
目录下存在愤怒的小鸟.exe和fun.dll文件,最新版火绒,windows defender,腾讯电脑管家,360静态扫描都未发现恶意程序 动态执行,杀软也未拦截 上传到virustotal网站分析恶意程序,只有三个引擎检测出来 die分析…...
第4章 基于中点电流的NPC逆变器中点电压平衡策略
1. 工作原理 1.1 NPC型三电平逆变器工作原理 NPC型三相三电平逆变器有A、B、C三个桥臂,其组成结构是相同的,本章以A相为例,对其工作原理进行分析。开关器件SA1和SA3、SA2和SA4为互补器件,通过控制开关器件的导通和关断状态&#…...
消息队列篇--通信协议篇--应用层协议和传输层协议理解
在网络通信中,传输层协议和应用层协议是OSI模型中的两个不同层次的协议,它们各自承担着不同的职责。 下文中,我们以TCP/UDP(传输层协议)和HTTP/SMTP(应用层协议)为例进行详细解释。 1、传输层协…...
FLTK - FLTK1.4.1 - demo - animgifimage
文章目录 FLTK - FLTK1.4.1 - demo - animgifimage概述笔记END FLTK - FLTK1.4.1 - demo - animgifimage 概述 知识点: 注册图像文件类型判断回调 FLTK支持的图像格式 GIF, BMP, ICO, PNM, PNG, jpg, svg 事件回调的注册 GIF图像显示为图片或动画的标志设置 // 超时回调的设置…...
目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
以下是目前市场主流AI PC对**大模型本地部署支持情况**的综合分析,结合硬件能力、软件生态及厂商动态进行总结: --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案(CPUGPUNPU)**:主流…...
1.2 基于深度学习的底层视觉技术
文章目录 高层视觉任务与底层视觉任务深度神经网络相对于传统方法的优势 高层视觉任务与底层视觉任务 计算机视觉中的任务包含高层视觉任务,底层视觉任务。高层视觉任务是处理语义级别相关的任务,例如图像分类、目标检测、图像分割等。底层视觉任务处理与…...
HTML 标题
HTML 标题 引言 HTML(超文本标记语言)是构建网页的基础,而标题则是网页中不可或缺的元素。标题不仅能够帮助用户快速了解网页内容,还能够对搜索引擎优化(SEO)产生重要影响。本文将详细介绍HTML标题的用法…...
SOME/IP--协议英文原文讲解3
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…...
Microsoft Visual Studio 2022 主题修改(补充)
Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了,今天闲来无事就补充几点细节。 具体的修改可以参考:Microsoft Visual Studio 2022 透明背景修改(快捷方法)_material studio怎么把背景弄成透明-CSDN博客文…...
UE(UltraEdit) 配置简易C/C++编译运行环境
该类型其他帖子 EmEditor 配置简易C/C 编译运行环境_emeditor 代码运行-CSDN博客 RJ TextEd 配置简易C/C 编译运行环境-CSDN博客 这种配置适合ACM竞赛,即要求不使用现代IDE,又想用一个比较好用、至少支持代码高亮的编辑器。 前提条件 1.Mingw GCC 已…...
使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统
近期,我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子,需要在这类环境下开发程序。说实在的我也没有用过这个平台,但是基于常识,推测只要基于C和Qt,应该问题不大。 1. …...
AgentVault Memory:构建本地AI编码记忆库,实现跨工具语义搜索与知识管理
1. 项目概述:为什么我们需要一个统一的AI编码记忆库如果你和我一样,每天的工作流里塞满了各种AI编码助手——Claude Code在终端里处理一个项目,Cursor在IDE里开着,偶尔切到OpenCode或者Codex处理点零碎任务。每次对话都充满了宝贵…...
基于Web Audio与Three.js的VR音乐可视化系统开发实践
1. 项目概述:当音乐可视化遇上VR,一次沉浸式体验的探索最近在折腾一个挺有意思的项目,叫“VersaYT/JellyVR”。乍一看这个名字,可能有点摸不着头脑,它其实是一个将YouTube音乐视频的音频频谱,实时转化为虚拟…...
API中转站稳定性怎么判断?中小企业选平台别只看SLA数字
API中转站稳定性怎么判断?中小企业选平台别只看SLA数字 摘要 :选择Claude API中转站时,稳定性是核心考量。但"稳定"对不同用户含义不同,本文从不同用户视角分析如何评估API中转站的稳定性。 中转站稳定吗 稳定是相对的&…...
ECA:编辑器无关的AI编程伴侣,统一配置多模型与编辑器
1. 项目概述:一个编辑器无关的AI编程伴侣如果你和我一样,每天大部分时间都泡在编辑器里,那你肯定也经历过这种场景:面对一段复杂的业务逻辑,或者一个陌生的API,你希望有个“懂行”的伙伴能立刻给你解释、重…...
底特律汽车产业转型:从全球平台战略到创新生态重构
1. 从废墟中重生:底特律汽车产业的韧性复苏如果你在2010年前后关注过全球汽车产业,或者对美国的工业经济史稍有了解,那么“底特律”这个名字,在当时几乎就是“衰败”与“绝望”的同义词。这座曾经的“汽车之城”,在200…...
3分钟掌握Word转HTML:Mammoth.js让你的文档转换变得如此简单
3分钟掌握Word转HTML:Mammoth.js让你的文档转换变得如此简单 【免费下载链接】mammoth.js Convert Word documents (.docx files) to HTML 项目地址: https://gitcode.com/gh_mirrors/ma/mammoth.js 在现代办公和内容管理中,Word转HTML的需求无处…...
libhv实战:300行构建C++异步RPC框架,集成Protobuf与evpp
1. 为什么需要C异步RPC框架 在微服务架构盛行的今天,服务间的通信效率直接决定了系统整体性能。传统同步RPC调用就像打电话,必须等对方接听才能开始对话,而异步RPC更像是发微信,发完消息就可以去做其他事情,等对方回复…...
别再只用BigGantt了!这个免费JIRA甘特图插件Gantt Suite,配置简单速度快
轻量高效的JIRA甘特图解决方案:Gantt Suite全面评测与迁移指南 在项目管理领域,甘特图作为可视化排期的黄金标准已有百年历史。然而当这一经典工具遇上现代敏捷开发平台JIRA时,许多团队却陷入了两难境地——要么忍受BigGantt等老牌插件的臃肿…...
在Node.js后端服务中集成Taotoken调用多模型API实战
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Node.js后端服务中集成Taotoken调用多模型API实战 构建需要AI能力的Web服务时,后端开发者常面临模型选型、API接入复…...
STM32L4低功耗实战:用RTC内部唤醒定时1秒,让设备续航翻倍(附CubeIDE配置)
STM32L4低功耗实战:RTC唤醒中断与CubeIDE配置全解析 在电池供电的物联网终端设计中,每微安电流都关乎产品寿命。曾有个智能农业项目,原本预计6个月的传感器续航,因未优化低功耗模式,实际仅维持了3周。这促使我们深入研…...
