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细致内容,早关注不迷路。

​

相关推荐
Dxy123931021625 分钟前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷25 分钟前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
瀚高PG实验室31 分钟前
发布端逻辑复制槽消失
数据库·postgresql·瀚高数据库
云和数据.ChenGuang38 分钟前
深入解析 Python 的 dir():从用法到 CPython 源码实现
开发语言·人工智能·python·langchain
ss27341 分钟前
PostgreSQL慢查询定位与优化
数据库·postgresql
馒头不想说话1 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
ZhengEnCi1 小时前
Agent 规则管理:让 Memory 做索引、让 Skill 存规则——上下文上限实测与分工方案
后端
香蕉大香蕉(06敬畏市场)1 小时前
MySQL 单点详解(07)
java·数据库·mysql·ai·博客·八股
nice_lcj5201 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
骑着蜗牛撵大象3272 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp