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

【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";

局部变量和成员变量
  • 局部变量

局部变量是在函数或代码块内部定义的变量,它的作用域仅限于定义它的代码块。

  1. 局部变量的作用域仅限于其所在的代码块(如函数、循环、条件语句等)。在代码块外部无法访问局部变量。
  2. 局部变量的生命周期从变量被定义开始,到代码块结束时结束。当代码块执行完毕时,局部变量会被销毁,占用的内存也会被释放。
  3. 局部变量通常存储在**栈(stack)**中。
  • 成员变量

成员变量是定义在类内部的变量,它是类的一部分,用于存储对象的状态信息。

  1. 成员变量的作用域是整个类,可以在类的任何成员函数中访问。成员变量也被称为类的属性或字段。
  2. 成员变量的生命周期与对象的生命周期一致。当对象被创建时,成员变量被初始化;当对象被销毁时,成员变量也会被销毁。
  3. 成员变量通常存储在**堆(heap)**中,与对象的其他部分一起分配内存。

在这里插入图片描述

setAttribute 类

用于设置对象的属性(attributes)。这些属性可以影响对象的行为或外观。setAttribute 是 QObject 类的一个成员函数,因此几乎所有 Qt 对象(如窗口、对话框、控件等)都可以使用它。
Qt 提供了许多预定义的属性,可以通过 Qt::WidgetAttribute 枚举来设置。

  1. Qt::WA_DeleteOnClose:当窗口或对话框关闭时,自动删除该对象。
  2. Qt::WA_QuitOnClose:当窗口关闭时,调用 QApplication::quit(),退出应用程序。
  3. Qt::WA_ShowModal:使窗口或对话框以模态方式显示(类似于 exec(),但不阻塞线程)。
  4. Qt::WA_TranslucentBackground:使窗口的背景透明。
  5. 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)

定义 定义一系列算法&#xff0c;把它们一个个封装起来&#xff0c;并且使他们可互相替换&#xff08;变化&#xff09;。该模式使算法可独立于使用它的客户程序&#xff08;稳定&#xff09;而变化&#xff08;拓展&#xff0c;子类化&#xff09;。 动机&#xff08;Motiva…...

Python里的小整数问题挺有意思的

简单来说&#xff0c;Python为了优化性能&#xff0c;会把一些常用的整数&#xff08;通常是-5到256&#xff09;提前创建好&#xff0c;放到一个“缓存池”里。这样&#xff0c;当你用到这些小整数时&#xff0c;Python就不用每次都重新创建对象了&#xff0c;直接从缓存池里拿…...

开源智慧园区管理系统对比五款主流产品探索智能运营新模式

内容概要 在这个数字化迅速发展的时代&#xff0c;园区管理也迎来了全新的机遇和挑战。众所周知&#xff0c;开源智慧园区管理系统作为一种创新解决方案&#xff0c;正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整&#xff0c;也为用户提供…...

正则表达式入门

入门 1、提取文章中所有的英文单词 //1&#xff0e;先创建一个Pattern对象&#xff0c;模式对象&#xff0c;可以理解成就是一个正则表达式对象 Pattern pattern Pattern.compile("[a-zA-Z]"); //2&#xff0e;创建一个匹配器对象 //理解:就是 matcher匹配器按照p…...

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具&#xff0c;主要用于批处理和大数据分析&#xff0c;而不是为OLTP&#xff08;在线事务处理&#xff09;操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…...

【某大厂一面】HashSet底层怎么实现的

HashSet 是 Java 集合框架中的一个非常常用的集合类&#xff0c;它实现了 Set 接口&#xff0c;并且底层通常是通过 哈希表&#xff08;HashMap&#xff09;来实现的。要理解 HashSet 的底层实现&#xff0c;我们需要从哈希表的工作原理开始讲起。下面是对 HashSet 底层实现的详…...

动手学图神经网络(3):利用图神经网络进行节点分类 从理论到实践

利用图神经网络进行节点分类:从理论到实践 前言 在之前的学习中,大家对图神经网络有了初步的了解。本次教程将深入探讨如何运用图神经网络(GNNs)来解决节点分类问题。在节点分类任务里,大家往往仅掌握少量节点的真实标签,却要推断出其余所有节点的标签,这属于归纳式学…...

免杀国内主流杀软的恶意样本分析

目录下存在愤怒的小鸟.exe和fun.dll文件&#xff0c;最新版火绒&#xff0c;windows defender&#xff0c;腾讯电脑管家&#xff0c;360静态扫描都未发现恶意程序 动态执行&#xff0c;杀软也未拦截 上传到virustotal网站分析恶意程序&#xff0c;只有三个引擎检测出来 die分析…...

第4章 基于中点电流的NPC逆变器中点电压平衡策略

1. 工作原理 1.1 NPC型三电平逆变器工作原理 NPC型三相三电平逆变器有A、B、C三个桥臂&#xff0c;其组成结构是相同的&#xff0c;本章以A相为例&#xff0c;对其工作原理进行分析。开关器件SA1和SA3、SA2和SA4为互补器件&#xff0c;通过控制开关器件的导通和关断状态&#…...

消息队列篇--通信协议篇--应用层协议和传输层协议理解

在网络通信中&#xff0c;传输层协议和应用层协议是OSI模型中的两个不同层次的协议&#xff0c;它们各自承担着不同的职责。 下文中&#xff0c;我们以TCP/UDP&#xff08;传输层协议&#xff09;和HTTP/SMTP&#xff08;应用层协议&#xff09;为例进行详细解释。 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对**大模型本地部署支持情况**的综合分析&#xff0c;结合硬件能力、软件生态及厂商动态进行总结&#xff1a; --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案&#xff08;CPUGPUNPU&#xff09;**&#xff1a;主流…...

1.2 基于深度学习的底层视觉技术

文章目录 高层视觉任务与底层视觉任务深度神经网络相对于传统方法的优势 高层视觉任务与底层视觉任务 计算机视觉中的任务包含高层视觉任务&#xff0c;底层视觉任务。高层视觉任务是处理语义级别相关的任务&#xff0c;例如图像分类、目标检测、图像分割等。底层视觉任务处理与…...

HTML 标题

HTML 标题 引言 HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;而标题则是网页中不可或缺的元素。标题不仅能够帮助用户快速了解网页内容&#xff0c;还能够对搜索引擎优化&#xff08;SEO&#xff09;产生重要影响。本文将详细介绍HTML标题的用法…...

SOME/IP--协议英文原文讲解3

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 Note: Thi…...

Microsoft Visual Studio 2022 主题修改(补充)

Microsoft Visual Studio 2022 透明背景修改这方面已经有很多佬介绍过了&#xff0c;今天闲来无事就补充几点细节。 具体的修改可以参考&#xff1a;Microsoft Visual Studio 2022 透明背景修改&#xff08;快捷方法&#xff09;_material studio怎么把背景弄成透明-CSDN博客文…...

UE(UltraEdit) 配置简易C/C++编译运行环境

该类型其他帖子 EmEditor 配置简易C/C 编译运行环境_emeditor 代码运行-CSDN博客 RJ TextEd 配置简易C/C 编译运行环境-CSDN博客 这种配置适合ACM竞赛&#xff0c;即要求不使用现代IDE&#xff0c;又想用一个比较好用、至少支持代码高亮的编辑器。 前提条件 1.Mingw GCC 已…...

使用 MSYS2 qemu 尝鲜Arm64架构国产Linux系统

近期&#xff0c;我的师弟咨询我关于Arm64架构的国产CPU国产OS开发工具链问题。他们公司因为接手了一个国企的单子&#xff0c;需要在这类环境下开发程序。说实在的我也没有用过这个平台&#xff0c;但是基于常识&#xff0c;推测只要基于C和Qt&#xff0c;应该问题不大。 1. …...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...