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 ...
随机推荐
- 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍
一.伺服刹车 关键词:急停,急停中间继电器.刹车中间继电器,刹车使能 正文: 通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠. 伺服刹车硬件,一般是24v电源给进去,就会释放刹 ...
- javascript现代编程系列教程之五——正零和负零
在JavaScript中,正零(+0)和负零(-0)都代表数值0,它们在大多数情况下是等价的.然而,在某些特定的场景下,正零和负零的行为会有所不同. 除法操作:当0被用作除数时,正零和负零会产生不同的 ...
- 力扣34(java)-在排序数组中查找元素的第一个和最后一个位置(中等)
题目: 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 你 ...
- 力扣419(java)-甲板上的战舰(中等)
题目: 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量. 战舰 只能水平或者 ...
- CF1481D AB Graph 题解
CF1481D AB Graph 题解 [思路] 首先有几个显而易见的东西. 如果存在两个点,他们之间的两条边字母相同,那么一定有解(在两个点之间跳.) 否则,这张图的邻接矩阵一定长成这样: * a ...
- HarmonyOS NEXT应用开发—自定义视图实现Tab效果
介绍 本示例介绍使用Text.List等组件,添加点击事件onclick,动画,animationTo实现自定义Tab效果. 效果预览图 使用说明 点击页签进行切换,选中态页签字体放大加粗,颜色由灰变 ...
- 阿里云安全运营中心:DDoS攻击趁虚而入,通过代理攻击已成常态
应用层DDoS攻击与传统的DDoS攻击有着很大不同.传统的DDoS攻击通过向攻击目标发起大流量并发式访问造成服务不可用,系统瘫痪,这种方式比较容易被识破,且市场上已经有成熟的应对方案.而近年来兴起的应 ...
- KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了!
简介:时间来到 2022 年,KubeVela 也正式进入了第四个阶段,在原先核心控制器 API 基本稳定的基础上,我们以插件的形式增加了一系列开箱即用的功能.让开发者可以通过 UI 控制台的方式, ...
- 阿里云服务网格ASM集成SLS告警
简介:随着微服务的流行,微服务的架构也在不断的发展演进,Spring Cloud 与 Dubbo为代表的微服务开发框架也得到了普及和落地:在云原生时代,无侵入的服务网格(Service Mesh)开 ...
- OpenKruise v0.10.0 新特性 WorkloadSpread 解读
简介: 针对需求,OpenKruise 在 v0.10.0 版本中新增了 WorkloadSpread 特性.目前它支持配合 Deployment.ReplicaSet.CloneSet 这些 wo ...