在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,QFileDialog 这几种,这里我将总结本人在开发过程中常用到的标准对话框的使用技巧。

Qt框架下,常用的标准对话框有下面这几种:

  • QMessageBox 提示信息框
  • QInputDialog 基本输入对话框(文本输入,整数输入,浮点数输入,单选框输入)
  • QFileDialog 文件选择对话框(选择文件,多选文件,保存文件)

QMessageBox 消息弹窗: 消息对话框用于提示用户,常见的有四种分别是:提示,警告,错误,确认,代码归纳如下所示。

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QMessageBox>
  4. MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
  5. {
  6. ui->setupUi(this);
  7. }
  8. MainWindow::~MainWindow()
  9. {
  10. delete ui;
  11. }
  12. // By : LyShark
  13. // https://www.cnblogs.com/lyshark
  14. // 弹出各种MessageBox
  15. void MainWindow::on_pushButton_clicked()
  16. {
  17. QString dlgTitle="消息框";
  18. QString strInfo="文件已被修改,是否保存修改 ?";
  19. QMessageBox::StandardButton defaultBtn = QMessageBox::NoButton; // 缺省按钮
  20. QMessageBox::StandardButton result; // 返回选择的按钮
  21. // 弹窗分类 Question information warning critical
  22. result=QMessageBox::question(this, dlgTitle, strInfo,QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,defaultBtn);
  23. if (result==QMessageBox::Yes)
  24. ui->plainTextEdit->appendPlainText("Question消息框: Yes 被选择");
  25. else if(result==QMessageBox::No)
  26. ui->plainTextEdit->appendPlainText("Question消息框: No 被选择");
  27. else if(result==QMessageBox::Cancel)
  28. ui->plainTextEdit->appendPlainText("Question消息框: Cancel 被选择");
  29. else
  30. ui->plainTextEdit->appendPlainText("Question消息框: 无选择");
  31. }
  32. // 弹出关于提示
  33. void MainWindow::on_pushButton_2_clicked()
  34. {
  35. QString dlgTitle="about 消息框";
  36. QString strInfo="我开发的数据查看软件 V1.0 \n 保留所有版权";
  37. QMessageBox::about(this, dlgTitle, strInfo);
  38. }

QMessageBox 退出事件: 弹窗组件还可以配合QCloseEvent实现事件通知机制,例如当窗体被关闭则提示用户是否关闭窗体。

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QMessageBox>
  4. #include <QCloseEvent>
  5. MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. }
  9. // 窗口关闭时询问是否退出
  10. void MainWindow::closeEvent(QCloseEvent *event)
  11. {
  12. QMessageBox::StandardButton result=QMessageBox::question(this, "确认", "确定要退出本程序吗?",
  13. QMessageBox::Yes|QMessageBox::No |QMessageBox::Cancel,
  14. QMessageBox::No);
  15. if (result==QMessageBox::Yes)
  16. event->accept();
  17. else
  18. event->ignore();
  19. }
  20. // By : LyShark
  21. // https://www.cnblogs.com/lyshark
  22. MainWindow::~MainWindow()
  23. {
  24. delete ui;
  25. }

QInputDialog 对话框: 该对话框长用于输入一段特殊的文本,浮点数,或者选择一个列表框中的选项,该功能用于简单的用户交互场景。

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QLineEdit>
  4. #include <QInputDialog>
  5. MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
  6. {
  7. ui->setupUi(this);
  8. }
  9. MainWindow::~MainWindow()
  10. {
  11. delete ui;
  12. }
  13. // 文本输入对话框
  14. void MainWindow::on_pushButton_clicked()
  15. {
  16. QString dlgTitle="输入文字对话框";
  17. QString txtLabel="请输入文件名";
  18. QString defaultInput="新建文件.txt";
  19. QLineEdit::EchoMode echoMode=QLineEdit::Normal; // 正常文字输入
  20. // QLineEdit::EchoMode echoMode=QLineEdit::Password; // 密码输入
  21. bool flag = false;
  22. QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &flag);
  23. if (flag && !text.isEmpty())
  24. {
  25. ui->plainTextEdit->appendPlainText(text);
  26. }
  27. }
  28. // 整数数值输入对话框
  29. // By : LyShark
  30. // https://www.cnblogs.com/lyshark
  31. void MainWindow::on_pushButton_2_clicked()
  32. {
  33. QString dlgTitle="输入整数对话框";
  34. QString txtLabel="设置字体大小";
  35. int defaultValue=ui->plainTextEdit->font().pointSize(); // 现有字体大小
  36. int minValue=6, maxValue=50, stepValue=1; // 范围(步长)
  37. bool flag=false;
  38. int inputValue = QInputDialog::getInt(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,stepValue,&flag);
  39. if (flag)
  40. {
  41. QFont font=ui->plainTextEdit->font();
  42. font.setPointSize(inputValue);
  43. ui->plainTextEdit->setFont(font);
  44. }
  45. }
  46. // 浮点数输入对话框
  47. void MainWindow::on_pushButton_3_clicked()
  48. {
  49. QString dlgTitle="输入浮点数对话框";
  50. QString txtLabel="输入一个浮点数";
  51. float defaultValue=3.13;
  52. float minValue=0, maxValue=10000; // 范围
  53. int decimals=2; // 小数点位数
  54. bool flag=false;
  55. float inputValue = QInputDialog::getDouble(this, dlgTitle,txtLabel,defaultValue, minValue,maxValue,decimals,&flag);
  56. if (flag)
  57. {
  58. QString str=QString::asprintf("输入了一个浮点数:%.2f",inputValue);
  59. ui->plainTextEdit->appendPlainText(str);
  60. }
  61. }
  62. // 单选框条目选择对话框
  63. void MainWindow::on_pushButton_4_clicked()
  64. {
  65. QStringList items; // 列表内容
  66. items <<"优秀"<<"良好"<<"合格"<<"不合格"; // 放入列表
  67. QString dlgTitle="条目选择对话框";
  68. QString txtLabel="请选择级别";
  69. int curIndex=0; //初始选择项
  70. bool editable=false; // 是否可编辑
  71. bool flag=false;
  72. QString text = QInputDialog::getItem(this, dlgTitle,txtLabel,items,curIndex,editable,&flag);
  73. if (flag && !text.isEmpty())
  74. {
  75. ui->plainTextEdit->appendPlainText(text);
  76. }
  77. }

QFileDialog 对话框: 该对话框用于对文本的操作,例如打开文件,保存文件,选择文件夹等,当点击选择后,对话框会自动提取出文件路径。

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QFileDialog>
  4. MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
  5. {
  6. ui->setupUi(this);
  7. }
  8. MainWindow::~MainWindow()
  9. {
  10. delete ui;
  11. }
  12. // 选择单个文件对话框
  13. void MainWindow::on_pushButton_clicked()
  14. {
  15. QString curPath=QDir::currentPath(); // 获取系统当前目录
  16. // QString curPath=QCoreApplication::applicationDirPath(); // 获取应用程序的路径
  17. QString dlgTitle="选择一个文件"; // 对话框标题
  18. QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件过滤器
  19. QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);
  20. if (!aFileName.isEmpty())
  21. {
  22. ui->plainTextEdit->appendPlainText(aFileName);
  23. }
  24. }
  25. // 选择多个文件对话框
  26. // By : LyShark
  27. // https://www.cnblogs.com/lyshark
  28. void MainWindow::on_pushButton_2_clicked()
  29. {
  30. // QString curPath=QCoreApplication::applicationDirPath(); // 获取应用程序的路径
  31. QString curPath=QDir::currentPath(); // 获取系统当前目录
  32. QString dlgTitle="选择多个文件"; // 对话框标题
  33. QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; // 文件过滤器
  34. QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curPath,filter);
  35. for (int i=0; i<fileList.count();i++)
  36. {
  37. // 循环将文件路径添加到列表中
  38. ui->plainTextEdit->appendPlainText(fileList.at(i));
  39. }
  40. }
  41. // 选择文件夹
  42. void MainWindow::on_pushButton_3_clicked()
  43. {
  44. QString curPath=QCoreApplication::applicationDirPath(); // 获取应用程序的路径
  45. // QString curPath=QDir::currentPath(); // 获取系统当前目录
  46. // 调用打开文件对话框打开一个文件
  47. QString dlgTitle="选择一个目录"; // 对话框标题
  48. QString selectedDir=QFileDialog::getExistingDirectory(this,dlgTitle,curPath,QFileDialog::ShowDirsOnly);
  49. if (!selectedDir.isEmpty())
  50. {
  51. ui->plainTextEdit->appendPlainText(selectedDir);
  52. }
  53. }
  54. // 保存文件对话框
  55. void MainWindow::on_pushButton_4_clicked()
  56. {
  57. QString curPath=QCoreApplication::applicationDirPath(); // 获取应用程序的路径
  58. QString dlgTitle="保存文件"; // 对话框标题
  59. QString filter="文本文件(*.txt);;h文件(*.h);;C++文件(.cpp);;所有文件(*.*)"; // 文件过滤器
  60. QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
  61. if (!aFileName.isEmpty())
  62. {
  63. ui->plainTextEdit->appendPlainText(aFileName);
  64. }
  65. }

C/C++ Qt Dialog 对话框组件应用的更多相关文章

  1. C/C++ Qt 自定义Dialog对话框组件应用

    在上一篇博文 <C/C++ Qt 标准Dialog对话框组件应用> 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能. 但有时候我们需要一次性修改多个数据,使用默认 ...

  2. 第二百零四节,jQuery EasyUI,Dialog(对话框)组件

    jQuery EasyUI,Dialog(对话框)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解EasyUI中Dialog(窗口)组件的使用方法,这个组件依赖 ...

  3. Dialog( 对话框) 组件

    一. 加载方式//class 加载方式<div class="easyui-dialog" title="My Dialog"style="wi ...

  4. 关于Element对话框组件Dialog在使用时的一些问题及解决办法

    Element对话框组件Dialog在我们的实际项目开发中可以说是一个使用频率较高的组件,它能为我们展示提示的功能,如:业务模块提交前展示我们曾经输入或选择过的业务信息,或者展示列表信息中某项业务的具 ...

  5. 【golang-GUI开发】struct tags系统(二)qt的自定义组件和构造函数

    今天我们来讲讲自定义组件和它的构造函数. 在前面的文章里我们已经接触了好几个自定组件,这次的示例是一个自定义对话框,他有一个about按钮,点击按钮可以显示出Qt的信息或者用户输入的信息.这是效果图: ...

  6. 【Qt开发】Qt标准对话框之QMessageBox

    好久没有更新博客,主要是公司里面还在验收一些东西,所以没有及时更新.而且也在写一个基于Qt的画图程序,基本上类似于PS的东西,主要用到的是Qt Graphics View Framework.好了,现 ...

  7. 12个QT基本对话框,以及淡入原理(用定时器把窗口逐渐变成透明)

    一.基本对话框 1,核心库: 界面程序 QApplication 非程序界面QCoreAppliction 2,消息循环必须执行QApplication.exec(); 3,消息绑定机制: 信号-槽  ...

  8. QT模态对话框用法(在UI文件中设置Widget背景图,这个图是一个带阴影边框的图片——酷)

    QT弹出模态对话框做法: 1.新建UI文件时,一定要选择基类是QDialog的,我的选择是:Dialog without Buttons(),如下图: 2.然后在使用的时候: MyDialog dlg ...

  9. 动手实现一个vue中的模态对话框组件

    写在前面 对话框是很常用的组件 , 在很多地方都会用到,一般我们可以使用自带的alert来弹出对话框,但是假如是设计 出的图该怎么办呢 ,所以我们需要自己写一个对话框,并且如果有很多地方都用到,那我们 ...

随机推荐

  1. Java:NIO 学习笔记-2

    Java:NIO 学习笔记-2 上一篇 NIO 学习笔记-1 看了 尚硅谷 的相应教程,此处又对比看了 黑马程序员 的课程 JAVA通信架构I/O模式,做了相应的笔记 前言 在 Java 的软件设计开 ...

  2. JVM:体系结构

    JVM:体系结构 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 概览 Java GC 主要回收的是 方法区 和 堆 中的内容 类加载器 类加载器是什么 双亲委派 ...

  3. 大闸蟹的项目分析——CSDN APP

    大闸蟹的软件案例分析 项目 内容 这个作业属于那个课程 班级博客 这个作业的要求在哪里 作业要求 我在这个课程的目标是 学习软件工程的相关知识 这个作业在哪个具体方面帮我实现目标 从多角度分析软件 一 ...

  4. 配置 JAVA 环境 JDK + IDEA

    配置JDK 搜索 ORACLE 官网,找到 JDK,下载 JDK8 版本 / JDK11 版本 选择合适的路径,我这里放在了 D 盘 配置下方系统环境变量,变量名为 JAVA_HOME,把刚刚安装的J ...

  5. Noip模拟13 2021.7.13:再刚题,就剁手&&生日祭

    T1 工业题 这波行列看反就非常尴尬.....口糊出所有正解想到的唯独行列看反全盘炸列(因为和T1斗智斗勇两个半小时...) 这题就是肯定是个O(n+m)的,那就往哪里想,a,b和前面的系数分开求,前 ...

  6. Windows平台编译器相关的几个预定义宏

    WIN32 是在windows.h 中定义的宏,包含winodws.h则定义该宏 _WIN32/_WIN64跟windows平台有关的宏,_WIN32在windows   32位和64位下都有该宏,_ ...

  7. IPv6(诞生原因、数据报格式、与IPv4的不同、地址表现形式、基本地址类型、IPv6与IPv4的过渡策略)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105297642 学习课程:<2019王道考研计算机网络> 学习目的 ...

  8. 矩阵n次幂的计算

    1.归纳法 两大数学归纳法 题目一 2.递推关系 题目一 题目二 3.方阵 题目一 4.矩阵对角化(重点) 题目一 题目二 题目三 题目四 5.矩阵性质(综合) 题目一 题目二 对于副对角线: 题目三

  9. PriorityQueue(优先队列)

    PriorityQueue 翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆顶为最小值. PriorityQueue 一个基于优先级的无界优先级队列. ...

  10. [CSP-S2021] 廊桥分配

    链接: P7913 题意: 有 \(m_1\) 架飞机和 \(m_2\) 架飞机停在两个机场,每架飞机有到达和离开的时间,要将 \(n\) 个廊桥分给两个机场,每个廊桥同一时刻只能停一架飞机,需要最大 ...