当前位置: 首页 > 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. …...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...