参考视频:黑马科技: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. 从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

    本文为从零开始写 Docker 系列第十一篇,实现类似 docker exec 的功能,使得我们能够进入到指定容器内部. 完整代码见:https://github.com/lixd/mydocker ...

  2. Windows 系统上如何安装 Python 环境(详细教程)

    Windows 系统上如何安装 Python 环境(详细教程) 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的.由于2.x版官方只维护到2020年,所以以3.x版作 ...

  3. 《c#高级编程》第4章C#4.0中的更改(八)——协变和逆变

    一.协变 C#协变是指在一些特定的情况下,可以将一个派生类型的实例赋值给其基类或接口类型的引用.这里的"派生类型"指的是从某个基类或接口继承并增加了新的成员的类型. C# 4.0 ...

  4. RocketMQ实战系列(一)——RocketMQ简介

    RocketMQ是一款分布式消息引擎,由阿里巴巴旗下的MetaQ和RocketMQ合并而来.RocketMQ提供了高可靠.高吞吐量.可伸缩.易于使用的消息发布/订阅服务,适用于大规模分布式系统的消息通 ...

  5. 牛客网-SQL专项训练24

    ①下列选项关于游标的作用叙述正确的是(D) 解析: 游标是一种从包括多条数据记录的结果集中每次提取一条记录以便处理的机制,可以看做是查询结果的记录指针.游标与视图类似,也是基于基表的临时表对象,也能够 ...

  6. 阿里云EMAS移动测试,帮您快速掌握移动端兼容性测试技巧

    简介: 兼容性测试用于验证应用在不同设备上进行安装/启动/登录/不同版本覆盖安装/卸载等操作时,是否存在兼容性问题:如界面适配问题.应用性能等,现阿里云EMAS套餐免费试用,帮您快速掌握移动端兼容性测 ...

  7. 云原生应用实现规范 - 初识 Operator

    简介: 本文我们将首先了解到 Operator 是什么,之后逐步了解到 Operator 的生态建设,Operator 的关键组件及其基本的工作原理,下面让我们来一探究竟吧. 作者 | 匡大虎.阚俊宝 ...

  8. SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

    简介: 项目最初使用 Arthas 主要有两个目的: 1. 通过 arthas 解决实现测试环境.性能测试环境以及生产环境性能问题分析工具的问题. 2. 通过使用 jad.mc.redefine 功能 ...

  9. [Go] Viper 加载项目配置,go build 打包配置文件进二进制

    Viper 的传统用法局部,加载到某个 package 下的全局变量后,其它 package 可以继续使用. var Conf *viper.Viper func init() { // File n ...

  10. WPF 切换主题使用 luna 复古版本

    本文告诉大家如何在 WPF 里面使用 luna 等复古主题 今天在 lsj 说他准备优化 WPF 的程序集时,准备删除 luna 等程序集时,找到了一段有趣的注释,发现在 WPF 里面可以通过一些有趣 ...