Qt 窗口 工具栏QToolBar、状态栏StatusBar


每日激励:"不设限和自我肯定的心态:I can do all things。 --- Stephen Curry"
**绪论​:
一段时间没有更新,这段时间一直在忙各种事情,后续将再次上路持续更新C++相关知识
本章将继续前面的QT篇章,本章主要讲到Qt界面中的工具栏和状态栏,它和前面Qt窗口中的菜单栏blog关系非常密切,通过学习这三个内容你就能搭建一个窗口的基本框架了,后续还将更新子窗口的创建,敬请期待~

早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。**

工具栏QToolBar 🪚🔨⛏️

工具栏是应⽤程序中集成各种功能实现快捷键使⽤的⼀个区域。可以有多个,也可以没有,它并不是应⽤程序中必须存在的组件。

  • 它是⼀个可移动的组件
  • 它的元素可以是各种窗⼝组件
  • 它的元素通常以图标按钮的⽅式存在。

如下图为⼯具栏的⽰意图🗺️:

使用QToolBar表示工具栏对象,一个窗口可以有多个工具栏,也可以没有,工具栏也可以手动移动位置。调⽤ QMainWindow类 的 addToolBar() 函数来创建⼯具栏,每增加⼀个⼯具栏都需要调⽤⼀次该函数。

实操1🎈

  1. 创建菜单栏MenuBar

  2. 创建菜单QMenu(文件),并添加到菜单栏中

  3. 手动创建QToolBar对象toolBar,再将工具栏加到窗口中(addToolBar

  4. 创建工具项两个 QAction 对象,构造输入名称

  5. 添加到工具栏和菜单栏中 addAction

  6. 给工具项使用triggered信号添加信号handle1 2(内部进行打印)

  7. 不过典型的工具栏一般是图标而不是文本

  8. 给工具项设置图标 setIcon

  9. QAction如果出现在工具栏上,也会产生 图标 覆盖文本

  10. 但注意的是:

    1. 此处被覆盖的文本 会以 tooltip的形式展示

但注意的是QAction即是QMenu的子元素又是QToolBar的子元素,释放的时候只会释放一次,并不会重复delete

实操2:创建多个工具栏🎈

  1. 创建两个工具栏,并添加到窗口中 addToolBar

  2. 创建4个菜单项QAction并分别添加到工具栏中

    1. 其中这俩个工具前面的 ... 时代表可以移动的状态
  3. 可以设置工具栏出现的初始位置,在addToolBar构造的时候进行设置使用另外一种重载的函数:设置第一个参数为停靠的位置:

    1. Qt::LeftToolBarArea 停靠在左侧
    2. Qt::RightToolBarArea 停靠在右侧
    3. Qt::TopToolBarArea 停靠在顶部
    4. Qt::BottomToolBarArea 停靠在底部
    5. Qt::AllToolBarAreas 以上四个位置都可停靠
  1. 可以设置工具栏允许停放到那些边缘
    1. QToolBar方法 setAllowedAreas(参数同上,以 | 进行增加)
  2. 可以设置工具栏是否允许浮动、移动
    1. setFloatable 不允许浮动(当设置不允许时就无法浮动)

    2. setMoveable 不允许移动

状态栏🫠🫠QStatusBar

状态栏简单从记事本来理解就如下图框选:

同样的和菜单栏类似Qt会默认生成一个

实操🎈

  1. 在我们创建的时候也是使用statusBar的时候,存在就获取,不存在就创建
  2. 将status设置到窗口中 setStatusBar(状态栏没有被创建这里是必要的,若存在没啥副作用)
  3. 显示临时信息,showMessage(message,显示时间ms)
  4. 给状态栏中添加一个子控件
    1. 状态栏使用addWidget条件,第一个参数是控件对象,第二个参数是一个拉伸系数
    2. QLabel、ProgressBar、PushButton...
    3. addPermanentWidget从右往左的添加控件

源码:

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStatusBar>
#include <QLabel>
#include <QProgressBar>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QStatusBar* status = new QStatusBar();
    setStatusBar(status);

//    showMessage("111",1000);
    QLabel* label = new QLabel("完成度:");
    QProgressBar* pro = new QProgressBar();
// 从左往右添加,参数1:widget、参数2:拉伸系数
//    status->addWidget(label);
//    status->addWidget(pro);

    status->addPermanentWidget(label);
    status->addPermanentWidget(pro);

}

MainWindow::~MainWindow()
{
    delete ui;
}

最终效果


本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量C++ qt细致内容,早关注不迷路。

相关推荐
paopaokaka_luck25 分钟前
基于SpringBoot+Uniapp的健身饮食小程序(协同过滤算法、地图组件)
前端·javascript·vue.js·spring boot·后端·小程序·uni-app
Villiam_AY29 分钟前
Redis 缓存机制详解:原理、问题与最佳实践
开发语言·redis·后端
患得患失9491 小时前
【前端】【vscode】【.vscode/settings.json】为单个项目配置自动格式化和开发环境
前端·vscode·json
UQWRJ1 小时前
菜鸟教程R语言一二章阅读笔记
开发语言·笔记·r语言
飛_1 小时前
解决VSCode无法加载Json架构问题
java·服务器·前端
柊二三2 小时前
XML的简略知识点
xml·数据库·oracle
岁忧2 小时前
macOS配置 GO语言环境
开发语言·macos·golang
朝朝又沐沐4 小时前
算法竞赛阶段二-数据结构(36)数据结构双向链表模拟实现
开发语言·数据结构·c++·算法·链表
YGY Webgis糕手之路4 小时前
OpenLayers 综合案例-轨迹回放
前端·经验分享·笔记·vue·web
魔尔助理顾问4 小时前
系统整理Python的循环语句和常用方法
开发语言·后端·python