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

【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()
{

}

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


http://www.kler.cn/a/525325.html

相关文章:

  • 论文阅读(九):通过概率图模型建立连锁不平衡模型和进行关联研究:最新进展访问之旅
  • pytorch实现半监督学习
  • Flutter使用Flavor实现切换环境和多渠道打包
  • 71-《颠茄》
  • 使用 postman 测试思源笔记接口
  • 如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt
  • 人口增长(信息学奥赛一本通-1070)
  • sudoers文件修改格式错误恢复
  • 《机器学习数学基础》补充资料:贝叶斯分类器
  • R语言统计分析——ggplot2绘图3——分组
  • 18.Word:数据库培训课程❗【34】
  • 无心剑七绝《经纬岁华》
  • llama.cpp LLM_ARCH_DEEPSEEK and LLM_ARCH_DEEPSEEK2
  • Tailwind CSS - Tailwind CSS 引入(安装、初始化、配置、引入、构建、使用 Tailwind CSS)
  • DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力
  • 代码随想录算法训练营第34天| 动态规划:01背包理论基础(二维和一维)、416. 分割等和子集
  • 【实践案例】使用Dify构建企业知识库
  • 探索Linux中的进程控制:从启动到退出的背后原理
  • 使用 Iptables 实现网络安全策略:从入门到精通
  • Python 梯度下降法(一):Gradient Descent
  • 10.8 FileSystemWatcher(文件监视)组件
  • k均值聚类将数据分成多个簇
  • 高级编码参数
  • 【Attention】KV Cache
  • TypeScript 学习 -类型 - 10
  • 快速提升网站收录:内容创作的艺术