Qt工具栏的使用
参考视频:黑马科技: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工具栏的使用的更多相关文章
- qt 工具栏和菜单栏
在前面的QMainWindow的基础之上,我们开始着手建造我们的应用程序.虽然现在已经有一个框架,但是,确切地说我们还一行代码没有写呢!下面的工作就不那么简单了!在这一节里面,我们要为我们的框架添加菜 ...
- OpenCV2.4.9 Qt5.3.1 开发环境配置错误原因与解决方案
问题原因与解决办法 A.配置完成后,示例程序无法正常显示图片且程序无法运行 出现原因:环境变量未正确配置 解决办法:检查环境变量,添加缺失的环境变量 B.出"未定义的引用..."类 ...
- [转]如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- []如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- Qt 学习之路 :菜单栏、工具栏和状态栏
在之前的<添加动作>一文中,我们已经了解了,Qt 将用户与界面进行交互的元素抽象为一种“动作”,使用QAction类表示.QAction可以添加到菜单上.工具栏上.期间,我们还详细介绍了一 ...
- Qt中实现菜单和工具栏功能
Qt创建菜单和工具栏: 一. temp.h文件的内容 1.定义类temp继承QMainWindow 2.添加Q_OBJECT , 构造函数 . 析构函数等内容 3.$重点内容 3.1定义QActio ...
- QT学习之菜单栏与工具栏
QT学习之菜单栏与工具栏 目录 简单菜单栏 多级菜单栏 上下菜单栏 工具栏 简单菜单栏 程序示例 from PyQt5.QtWidgets import QApplication, QMainWind ...
- Qt Widgets——工具栏和状态栏
本文主要涉及QSizeGrip ,QStatusBar ,QToolBar QToolBar 工具栏默认位于菜单栏下方,其上添加一个个action按钮,用于执行动作 绝大多谢以前都涉及过,只列出 QT ...
- QT学习二:工具栏
QT 的工具栏提供 Dock 功能.文字/图标显示排列的功能. void MainWindow::createToolBar(void) { QToolBar *toolBar = new QToo ...
- Qt 学习之路 2(12):菜单栏、工具栏和状态栏
Home / Qt 学习之路 2 / Qt 学习之路 2(12):菜单栏.工具栏和状态栏 Qt 学习之路 2(12):菜单栏.工具栏和状态栏 豆子 2012年9月10日 Qt 学习之路 2 2 ...
随机推荐
- 第四課-Channel Study File Reader & File Writer
示例描述:从数据库中读取数据并过滤转换为HL7并存放到指定目录;然后读取目录中的HL7文件转换为txt文本并存放到指定目录. 首先在F:\MirthConnect\Test目录下创建Out目录存放输出 ...
- Flagger on ASM——基于Mixerless Telemetry实现渐进式灰度发布系列 2 应用级扩缩容
简介: 应用级扩缩容是相对于运维级而言的.像监控CPU/内存的利用率就属于应用无关的纯运维指标,针对这种指标进行扩缩容的HPA配置就是运维级扩缩容.而像请求数量.请求延迟.P99分布等指标就属于应用相 ...
- 如何基于Dataphin实现敏感数据保护
简介: 在企业的发展过程中,如果不重视敏感数据的保护,和数据安全体系的建设,那么一旦发生了敏感数据泄漏事件,轻则企业口碑受损,业务受影响:重则会直接触法律,受到主管部门的处罚和制裁.本文将以一个最常 ...
- UWP 写入图片 Exif 信息
本文告诉大家如何在 UWP 中,保存图片的时候,写入 Exif 信息,也就是如照片的 相机型号 制造商 光圈值等信息的写入 在 UWP 中,保存图片或照片需要用到图片编码器,在使用编码器写入前可以设置 ...
- ESP32 分区表
当你编译程序,发现 app partition is too small for binary 错误的时候,就涉及到 ESP32 分区表的内容了. 一.基本概念 在了解分区之前,先了解一下以下概率,便 ...
- 第一讲 Cadence-于真博士课程简介
第一讲 Cadence-于真博士课程简介 以工程化的思想来学习本课程,比较有效,从一个DSP开发板设计为例开始,做出PCB板,顺带学会Cadence软件操作,而不是仅仅学习软件. 前期准备工作,阅读配 ...
- 路由跳转报错:Uncaught (in promise) NavigationDuplicated {_name: "NavigationDuplicated", name: "NavigationDuplicated",...
记录一个路由跳转的报错: 将换成
- 数仓OLAP技术
数据应用,是真正体现数仓价值的部分,包括且又不局限于 数据可视化.BI.OLAP.即席查询,实时大屏,用户画像,推荐系统,数据分析,数据挖掘,人脸识别,风控反欺诈,ABtest等等 OLAP(On-L ...
- linux-centos7.6 硬盘挂载
目录 一 .功能 二.VM中设置硬盘 2.1 系统关机状态下 2.2 添加硬盘 三.系统中挂载硬盘 3.1 查看硬盘信息 3.2 硬盘分区 3.3 格式化硬盘 3.4 临时挂载硬盘 3.4 开机自动挂 ...
- VNC远程控制软件是什么?有没有更好的远程桌面控制解决方案?
看官老爷们,你们是否需要远程访问或远程支持解决方案?来了解下VNC吧. 什么是VNC? VNC是虚拟网络计算(VNC)是一种远程桌面共享技术,用于从世界任何地方远程访问和控制计算机. VNC的工作原理 ...