【Qt】06-对话框

ops/2025/2/2 12:42:28/

对话框

  • 前言
  • 一、模态和非模态对话框
    • 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()
{}

还有这句别忘记加了
在这里插入图片描述


http://www.ppmy.cn/ops/155034.html

相关文章

【3】阿里面试题整理

[1]. ES架构&#xff0c;如何进行路由以及选主 路由&#xff1a;在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;默认的路由算法是基于文档的_id。具体来说&#xff0c;Elasticsearch会对文档的_id进行哈希计算&#xff0c;然后对分片数量取模&#xff0c;以确定该文…

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…

使用 postman 测试思源笔记接口

思源笔记 API 权鉴 官方文档-中文&#xff1a;https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图&#xff1a; 对应的xxx&#xff0c;在软件中查看 如上图&#xff1a;在每次发送 API 请求时&#xff0c;需要在 Header 中添加 以下键值对&a…

python学opencv|读取图像(四十五)增加掩模:使用cv2.bitwise_and()函数实现图像按位与运算

【1】引言 前序已经对使用cv2.bitwise_and()函数实现图像按位与运算进行了反复探究&#xff1a; python学opencv|读取图像&#xff08;四十三&#xff09;使用cv2.bitwise_and()函数实现图像按位与运算-CSDN博客 python学opencv|读取图像&#xff08;四十四&#xff09;原理…

C语言自定义数据类型详解(一)——结构体类型(上)

什么是自定义数据类型呢&#xff1f;顾名思义&#xff0c;就是我们用户自己定义和设置的类型。 在C语言中&#xff0c;我们的自定义数据类型一共有三种&#xff0c;它们分别是&#xff1a;结构体(struct)&#xff0c;枚举(enum)&#xff0c;联合(union)。接下来&#xff0c;我…

第四章 WAL 4.1 WAL文件

4.1 WAL文件 WAL文件用于存储WAL日志。本小节主要介绍WAL文件。 1、WAL文件大小 PG使用64位的无符号整型作为日志文件的寻址空间。如下所示: typedef uint64 XLogRecPtr;//日志寻址类型 static void PreallocXlogFiles(XLogRecPtr endptr)//预分配日志文件uint64 offset;…

机器学习之决策树(DecisionTree——C4.5)

在机器学习之决策树&#xff08;DecisionTree——ID3&#xff09;中我们提到&#xff0c;ID3无法处理是连续值或有缺失值的属性。而C4.5算法可以解决ID3算的上述局限性。 1、连续值属性的处理 对于数据集 D D D和连续值属性 A A A&#xff0c;假设连续值属性 A A A有 M M M个不…

【处理和预防校园霸凌】。营造安全

处理和预防校园霸凌对于营造安全、和谐的校园环境至关重要&#xff0c;以下从处理和预防两个方面提供一些建议&#xff1a; ### 处理校园霸凌 1. **及时干预制止**&#xff1a;教师一旦发现校园霸凌行为&#xff0c;要第一时间上前制止&#xff0c;确保受霸凌学生的人身安全&a…