参考视频:黑马科技:https://www.bilibili.com/video/BV1XW411x7NU?p=19

对话框通常会是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。

创建功能时,还是选择QMainwidow,我们自己来实现对话框。

工程所拥有的文件:

下面内容讨论的代码,只会在mainwindow.cpp中存在,所有下面给出的代码默认就是再mainwindow.cpp中。

先创建一个菜单栏:

1  模态对话框

模态对话框,就是会阻塞同一应用程序中其它窗口的输入。

测试代码:

 1     //创建工具栏并点击“模态对话框”触发一个模态的对话框
2 QToolBar *toolBar = addToolBar("toolBar");
3 QAction *model_dialog = toolBar->addAction("模态对话框");
4 connect(model_dialog, &QAction::triggered,
5 [=]()
6 {
7 QDialog dlg;
8 dlg.exec(); //一直在这里执行,直到窗口关闭
9 qDebug() << "model dialog";
10 }
11 );

运行测试:

只有模态对话框关闭了之后才会打印:"model dialog"。

2  非模态对话框

当操作非模态对话框时,我们也可以对主窗口进行操作。

测试代码:

 1     QAction *modelless_dialog = toolBar->addAction("非模态对话框");
2 connect(modelless_dialog, &QAction::triggered,
3 [=]()
4 {
5 //这里最好使用动态内存分配,且不要指定父对象,自己回收
6 QDialog *dlg = new QDialog();
7 dlg->setAttribute(Qt::WA_DeleteOnClose);
8 dlg->show();
9 qDebug() << "modeless dialog";
10 }
11 );

运行测试:

显示非模态对话框时就会打印“modeless dialog”,而不是关闭非模态对话框时打印。

3  消息对话框

QMessageBox用于显示消息提示。

测试代码:

1     QAction *message_dialog = toolBar->addAction("消息对话框");
2 connect(message_dialog, &QAction::triggered,
3 [=]()
4 {
5 //显示关于
6 QMessageBox::about(this, "about", "关于Qt");
7 }
8 );

运行测试:

还有一些其它类型的消息对话框,就不在这里说明了。

4  问题对话框

QMessageBox::question用于问题对话框。

测试代码:

 1     QAction *question_dialog = toolBar->addAction("问题对话框");
2 connect(question_dialog, &QAction::triggered,
3 [=]()
4 {
5 int ret = QMessageBox::question(this, "question", "请选择", QMessageBox::Yes | QMessageBox::No);
6 switch (ret) {
7 case QMessageBox::Yes:
8 qDebug() << "I am OK!";
9 break;
10 case QMessageBox::No:
11 qDebug() << "You choose no!";
12 default:
13 break;
14 }
15 }
16 );

运行测试:

选择Yes时,会打印:“I am OK!”,选择No时,会打印:“You choose no!”。

还有一些其它的问题选择,就不在这里列举了。

5  文件对话框

QFileDialog,用于实现文件对话框。

测试代码:

 1     QAction *file_dialog = toolBar->addAction("文件对话框");
2 connect(file_dialog, &QAction::triggered,
3 [=]()
4 {
5 QString path = QFileDialog::getOpenFileName(
6 this,
7 "open",
8 "../",
9 "source(*.cpp *.h);;"
10 "Text(*.txt);;all(*.*)"
11 );
12 qDebug() << path;
13 }
14 );

运行测试:

当我们选择一个文件打开之后,会打印出文件的路径。

说一下QFileDialog::getOpenFileName函数,函数原型:

1 QString getOpenFileName(QWidget * parent = 0,
2 const QString & caption = QString(),
3 const QString & dir = QString(),
4 const QString & filter = QString(),
5 QString * selectedFilter = 0,
6 Options options = 0)

参数时可选的,各个参数的含义如下:

parent:父窗口;

caption:对话框标题;

dir:对话框打开时的默认路径;

filter:过滤器,用于过滤特定的后缀名,多个过滤器之间使用";;"进行分隔;

selectedFilter:默认选择的过滤器;

option:对话框的一些参数设定。

完整代码:

给出mainwindow.cpp文件的完整代码:

 1 #include "mainwindow.h"
2 #include <QMenuBar>
3 #include <QMenu>
4 #include <QDialog>
5 #include <QAction>
6 #include <QToolBar>
7 #include <QDebug>
8 #include <QMessageBox>
9 #include <QFileDialog>
10
11 MainWindow::MainWindow(QWidget *parent)
12 : QMainWindow(parent)
13 {
14 this->resize(600, 500);
15
16 //创建工具栏并点击“模态对话框”触发一个模态的对话框
17 QToolBar *toolBar = addToolBar("toolBar");
18 QAction *model_dialog = toolBar->addAction("模态对话框");
19 connect(model_dialog, &QAction::triggered,
20 [=]()
21 {
22 QDialog dlg;
23 dlg.exec();
24 qDebug() << "model dialog";
25 }
26 );
27
28 QAction *modelless_dialog = toolBar->addAction("非模态对话框");
29 connect(modelless_dialog, &QAction::triggered,
30 [=]()
31 {
32 //这里最好使用动态内存分配,且不要指定父对象,自己回收
33 QDialog *dlg = new QDialog();
34 dlg->setAttribute(Qt::WA_DeleteOnClose);
35 dlg->show();
36 qDebug() << "modeless dialog";
37 }
38 );
39
40 QAction *message_dialog = toolBar->addAction("消息对话框");
41 connect(message_dialog, &QAction::triggered,
42 [=]()
43 {
44 //显示关于
45 QMessageBox::about(this, "about", "关于Qt");
46 }
47 );
48
49 QAction *question_dialog = toolBar->addAction("问题对话框");
50 connect(question_dialog, &QAction::triggered,
51 [=]()
52 {
53 int ret = QMessageBox::question(this, "question", "请选择", QMessageBox::Yes | QMessageBox::No);
54 switch (ret) {
55 case QMessageBox::Yes:
56 qDebug() << "I am OK!";
57 break;
58 case QMessageBox::No:
59 qDebug() << "You choose no!";
60 default:
61 break;
62 }
63 }
64 );
65
66
67 QAction *file_dialog = toolBar->addAction("文件对话框");
68 connect(file_dialog, &QAction::triggered,
69 [=]()
70 {
71 QString path = QFileDialog::getOpenFileName(
72 this,
73 "open",
74 "../",
75 "source(*.cpp *.h);;"
76 "Text(*.txt);;all(*.*)"
77 );
78 qDebug() << path;
79 }
80 );
81
82 }
83
84 MainWindow::~MainWindow()
85 {
86
87 }

Qt工具栏的使用的更多相关文章

  1. qt 工具栏和菜单栏

    在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜 ...

  2. OpenCV2.4.9 Qt5.3.1 开发环境配置错误原因与解决方案

    问题原因与解决办法 A.配置完成后,示例程序无法正常显示图片且程序无法运行 出现原因:环境变量未正确配置 解决办法:检查环境变量,添加缺失的环境变量 B.出"未定义的引用..."类 ...

  3. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  4. []如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  5. Qt 学习之路 :菜单栏、工具栏和状态栏

    在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...

  6. Qt中实现菜单和工具栏功能

    Qt创建菜单和工具栏: 一.  temp.h文件的内容 1.定义类temp继承QMainWindow 2.添加Q_OBJECT , 构造函数 . 析构函数等内容 3.$重点内容 3.1定义QActio ...

  7. QT学习之菜单栏与工具栏

    QT学习之菜单栏与工具栏 目录 简单菜单栏 多级菜单栏 上下菜单栏 工具栏 简单菜单栏 程序示例 from PyQt5.QtWidgets import QApplication, QMainWind ...

  8. Qt Widgets——工具栏和状态栏

    本文主要涉及QSizeGrip ,QStatusBar ,QToolBar QToolBar 工具栏默认位于菜单栏下方,其上添加一个个action按钮,用于执行动作 绝大多谢以前都涉及过,只列出 QT ...

  9. QT学习二:工具栏

    QT  的工具栏提供 Dock 功能.文字/图标显示排列的功能. void MainWindow::createToolBar(void) { QToolBar *toolBar = new QToo ...

  10. Qt 学习之路 2(12):菜单栏、工具栏和状态栏

    Home / Qt 学习之路 2 / Qt 学习之路 2(12):菜单栏.工具栏和状态栏 Qt 学习之路 2(12):菜单栏.工具栏和状态栏  豆子  2012年9月10日  Qt 学习之路 2  2 ...

随机推荐

  1. 第四課-Channel Study File Reader & File Writer

    示例描述:从数据库中读取数据并过滤转换为HL7并存放到指定目录;然后读取目录中的HL7文件转换为txt文本并存放到指定目录. 首先在F:\MirthConnect\Test目录下创建Out目录存放输出 ...

  2. Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容

    简介: 应用级扩缩容是相对于运维级而言的.像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容.而像请求数量.请求延迟.P99分布等指标就属于应用相 ...

  3. 如何基于Dataphin实现敏感数据保护

    ​简介: 在企业的发展过程中,如果不重视敏感数据的保护,和数据安全体系的建设,那么一旦发生了敏感数据泄漏事件,轻则企业口碑受损,业务受影响:重则会直接触法律,受到主管部门的处罚和制裁.本文将以一个最常 ...

  4. UWP 写入图片 Exif 信息

    本文告诉大家如何在 UWP 中,保存图片的时候,写入 Exif 信息,也就是如照片的 相机型号 制造商 光圈值等信息的写入 在 UWP 中,保存图片或照片需要用到图片编码器,在使用编码器写入前可以设置 ...

  5. ESP32 分区表

    当你编译程序,发现 app partition is too small for binary 错误的时候,就涉及到 ESP32 分区表的内容了. 一.基本概念 在了解分区之前,先了解一下以下概率,便 ...

  6. 第一讲 Cadence-于真博士课程简介

    第一讲 Cadence-于真博士课程简介 以工程化的思想来学习本课程,比较有效,从一个DSP开发板设计为例开始,做出PCB板,顺带学会Cadence软件操作,而不是仅仅学习软件. 前期准备工作,阅读配 ...

  7. 路由跳转报错:Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated",...

    记录一个路由跳转的报错: 将换成

  8. 数仓OLAP技术

    数据应用,是真正体现数仓价值的部分,包括且又不局限于 数据可视化.BI.OLAP.即席查询,实时大屏,用户画像,推荐系统,数据分析,数据挖掘,人脸识别,风控反欺诈,ABtest等等 OLAP(On-L ...

  9. linux-centos7.6 硬盘挂载

    目录 一 .功能 二.VM中设置硬盘 2.1 系统关机状态下 2.2 添加硬盘 三.系统中挂载硬盘 3.1 查看硬盘信息 3.2 硬盘分区 3.3 格式化硬盘 3.4 临时挂载硬盘 3.4 开机自动挂 ...

  10. VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?

    看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...