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 ...
随机推荐
- MMDeploy部署实战系列【第四章】:onnx,tensorrt模型推理
MMDeploy部署实战系列[第四章]:onnx,tensorrt模型推理 这个系列是一个随笔,是我走过的一些路,有些地方可能不太完善.如果有那个地方没看懂,评论区问就可以,我给补充. 目录: 0️⃣ ...
- K8s集群nginx-ingress监控告警最佳实践
本文分享自华为云社区<K8s集群nginx-ingress监控告警最佳实践>,作者:可以交个朋友. 一 背景 nginx-ingress作为K8s集群中的关键组成部分.主要负责k8s集群中 ...
- 【编程】C++ 常用容器以及一些应用案例
介绍一些我常用的C++容器和使用方法,以及使用案例.blog 1 概述 容器(Container)是一个存储其他对象集合的持有者对象.容器以类模板实现,对支持的元素类型有很大的灵活性.容器管理元素的存 ...
- EMR StarRocks 极速数据湖分析原理解析
简介:数据湖概念日益火热,本文由阿里云开源大数据 OLAP 团队和 StarRocks 数据湖分析团队共同为大家介绍" StarRocks 极速数据湖分析 "背后的原理. [首月9 ...
- Java Map中那些巧妙的设计
简介: 他山之石可以攻玉,这些巧妙的设计思想非常有借鉴价值,可谓是最佳实践.然而,大多数有关Java Map原理的科普类文章都是专注于"点",并没有连成"线", ...
- 一文读懂容器存储接口 CSI
简介: 在<一文读懂 K8s 持久化存储流程>一文我们重点介绍了 K8s 内部的存储流程,以及 PV.PVC.StorageClass.Kubelet 等之间的调用关系.接下来本文将将重点 ...
- 【详谈 Delta Lake 】系列技术专题 之 湖仓一体( Lakehouse )
简介: 本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 的系列技术文章.众所周知,Databricks 主导着开源大数据社区 Apache Spark.Delta L ...
- 划重点|iOS15正式发布, 全新的通知推送系统,你必须要知道!
简介: 今年友盟+联合达摩院决策智能实验室讲算法技术,推出国内首个智能推送功能,帮助产品运营人员实现一键式触达的精细化运营.通过精心打磨的在线学习与优化算法,对推送人群与推送文案进行精准匹配,最大化 ...
- [Go] 浅谈 Golang struct 与 PHP class 的相似
Golang 中的 struct 与 PHP 的 class 在使用方式上差不多. struct 中的成员可以类比 class 中的属性,struct 中的成员函数可以类比 class 中的方法. 对 ...
- 一键启动的AI离线知识库,无需复杂环境依赖,小白都能上手了
简介 在人工智能技术飞速发展的今天,我们经常面临一个挑战:如何快速.简便地部署和使用AI技术?AntSK项目,一个开源的AI知识库和智能体,就是为了解决这一问题而诞生的.现在,我们自豪地宣布,AntS ...