当前位置: 首页 > news >正文

(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);
}

http://www.dtcms.com/a/613840.html

相关文章:

  • 购物网站建设和使用东莞公司展厅设计公司
  • Android协程 vs. 传统线程/线程池:现代化异步编程的演进
  • 【编程】脚本编写入门:从零到一的自动化之旅
  • 自动化测试用例编写详解
  • ASC学习笔记0017:返回此能力系统组件的所有属性列表
  • Python可迭代对象讲解
  • 开源项目分享:Gitee热榜项目 2025年11月第三周 周榜
  • 哪里可做网站优化推广网站seo
  • Java Web 项目中Maven 常用库
  • 私人做网站图片网络科技有限公司怎么挣钱
  • 人力资源网站怎么做网络维护是什么职业
  • 体育直播/赛事直播/电竞直播/游戏直播/录播转播/原生APP/赛程比分系统
  • 学Java第四十五天——斗地主小游戏创作
  • 怎样创建一个国际网站wordpress外观菜单
  • 【总结】计网 IPv6
  • 【动态高斯重建】论文集合:从4DGT到OMG4、4DSioMo
  • 【ASR论文】Zipformer:更快、更强的语音识别编码器 | 小米公司
  • 从零开始学二叉树(上):树的初识 —— 从文件系统到树的基本概念
  • wordpress做网站卡吗服装企业 北京 网站建设
  • wordpress站点地址没更改wordpress 百秀主题
  • Foreign Function Interface
  • 在线C语言编译器 | 提供快速高效的C语言编程环境
  • 11月15日星期六今日早报简报微语报早读
  • 发电机组和负荷模型
  • 手机版 网站建设新闻今天
  • 节流throttle防抖debounce的函数封装
  • CSS 网格元素:构建现代网页布局的基石
  • 屹晶微 EG2134 三相独立半桥驱动芯片技术解析
  • 用py做网站写wordpress
  • 12. C语言高级编程-内存管理(2)