(6)框架搭建:Qt实战项目之主窗体快捷工具条
上节课我们完成了 Qt 菜单栏的基础搭建,让程序具备了核心的功能入口框架。本节课将在此基础上,带大家学习工具条(QToolBar)的搭建 —— 工具条作为菜单栏功能的快捷入口,能极大提升用户操作效率,是 Qt 桌面应用的核心组件之一。
核心类介绍
在 Qt 中搭建工具条,核心依赖以下 3 个类,理解它们的作用和关联关系是实现功能的关键:
1. QToolBar 核心类
工具条的容器载体,负责管理工具按钮、分隔符等组件,支持拖拽、浮动、隐藏等默认行为。
2. QAction 功能动作类
QAction 是 Qt 的 “动作抽象”,同一个 QAction 可同时关联到菜单栏、工具条、右键菜单,实现 “一处定义,多处使用”(比如 “打开文件” 动作,既可以在菜单栏的 “文件” 菜单中,也可以在工具条上显示)。
3. QIcon 图标类
为工具条按钮提供图标资源,提升界面美观度和辨识度。通过 QIcon("图标路径") 加载本地图标文件(支持 png、jpg、svg 等格式)。
工具条实战
实战内容
本节课的实战内容是在上一节课的基础上,创建一个工具条,要求:
1、工具条上放置两个按钮,分别是“新建项目”、“打开项目”;
2、工具条默认显示在窗口顶部,但支持拖拽停靠到其他区域;
3、工具条上的按钮以图标的形式显示,并且在图标下放显示出操作的名称;
实战步骤
头文件引入
只需要引入QToolBar的头文件即可,<QAction>头文件上节课我们已经引入,且<QAction>头文件会间接包含QIcon的 “前向声明”(class QIcon;),足以支持 “使用返回值类型” 这种场景,因此无需单独引入<QIcon>。
#include <QToolBar>
同样,我们也为工具条的实现创建一个单独的函数createToolBar(),集中编写工具条的逻辑,这样会让代码结构更整洁。
createToolBar()的实现
根据官方文档中QToolBar的构造函数,创建工具条,并设置工具条的样式,如下:
QToolBar *mainToolBar = new QToolBar(QStringLiteral("工具条"));
mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
我们看一下官方文档中setToolButtonStyle函数显示样式参数的枚举值都有哪些:
- Qt::ToolButtonIconOnly:只显示图标。
- Qt::ToolButtonTextOnly:只显示文字。
- Qt::ToolButtonTextBesideIcon:文字显示在图标旁边。
- Qt::ToolButtonTextUnderIcon:文字显示在图标下方。
- Qt::ToolButtonFollowStyle:遵循系统或样式表的默认设置。
可以换几个其他的显示样式,运行看看效果。
接下来,我们需要将工具条加入到主窗体中,这里需要用到QMainWindow类的addToolBar(Qt::ToolBarArea area, QToolBar *toolbar) 函数,其中第一个参数是工具条的显示区域,第二个参数是工具条对象。我们来看一下Qt::ToolBarArea的枚举值:
- Qt::LeftToolBarArea 左侧区域,工具栏垂直显示在窗口左侧
- Qt::RightToolBarArea 右侧区域,工具栏垂直显示在窗口右侧
- Qt::TopToolBarArea 顶部区域,工具栏水平显示在窗口顶部
- Qt::BottomToolBarArea 底部区域,工具栏水平显示在窗口底部
- Qt::AllToolBarAreas 所有区域,允许工具栏停靠在任何位置
- Qt::NoToolBarArea 无区域,工具栏无法停靠,通常用于浮动工具栏
本项目我们要将工具条添加到顶部区域,所以代码如下:
addToolBar(Qt::TopToolBarArea, mainToolBar);
接下来,我们把“新建项目”、“打开项目”两个操作项加入到工具条中,因为这两个QAction操作已经在前面定义过了,我们需要将这两个变量先改为全局成员变量,然后直接通过addAction函数添加至工具条即可。
mainToolBar->addAction(createProjAct);mainToolBar->addAction(openProjAct);
记得将createToolBar()函数加入到构造函数中调用一下,这样就可以运行测试效果了。

此时我们看到工具条默认显示在了窗口的顶部,我们拖拽移动工具条,可以将工具条拖放至窗口的上下左右任意一边。当然我们也可以限制工具条的显示位置,比如只允许显示在顶部和底部,可以这样进行设置:
mainToolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
工具条的核心价值在于 “快捷操作”,后续课程我们将为这些按钮添加实际的操作逻辑。如果大家在实战中遇到问题(如图标不显示、快捷键无效),或想扩展工具条功能,可以自行查阅官方文档进行练习,或者留言交流。
附录
SubCfgTool.h代码:
#pragma once#include <QtWidgets/QMainWindow>
//#include "ui_SubCfgTool.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QToolBar>class SubCfgTool : public QMainWindow
{Q_OBJECTpublic:SubCfgTool(QWidget *parent = nullptr);~SubCfgTool();void createMenuBar();void createToolBar();private:QAction* createProjAct;QAction* openProjAct;QAction* quitAct;
};
SubCfgTool.cpp代码:
#include "SubCfgTool.h"SubCfgTool::SubCfgTool(QWidget *parent): QMainWindow(parent)
{// ui.setupUi(this);createMenuBar();createToolBar();
}SubCfgTool::~SubCfgTool()
{}void SubCfgTool::createMenuBar()
{// 菜单栏QMenuBar* menuBar = this->menuBar();// 菜单QMenu* fileMenu = menuBar->addMenu("文件");QMenu* helpMenu = menuBar->addMenu("帮助");// 定义文件菜单中的菜单项createProjAct = new QAction("新建项目");openProjAct = new QAction("打开项目");quitAct = new QAction("退出");// 将菜单项加入到文件菜单fileMenu->addAction(createProjAct);fileMenu->addAction(openProjAct);fileMenu->addSeparator();fileMenu->addAction(quitAct);// 定义帮助菜单中的菜单项QAction* aboutAct = new QAction("关于");// 将菜单加入到帮助菜单项helpMenu->addAction(aboutAct);// 添加快捷键createProjAct->setShortcut(QKeySequence::New);openProjAct->setShortcuts(QKeySequence::Open);createProjAct->setAutoRepeat(false);// 临时测试代码connect(createProjAct, &QAction::triggered, []() {qDebug() << "Create New Project"; });// 设置图标createProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_new.png"));openProjAct->setIcon(QIcon(":/SubCfgTool/image/menu_open.png"));}void SubCfgTool::createToolBar()
{QToolBar* mainToolBar = new QToolBar(QStringLiteral("工具条"));mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);addToolBar(Qt::TopToolBarArea, mainToolBar);mainToolBar->addAction(createProjAct);mainToolBar->addAction(openProjAct);mainToolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
}
