当前位置: 首页 > 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/614697.html

相关文章:

  • 做阿里云网站空间建设工程施工合同实例
  • web中间件——Tomcat
  • Linux中管理员和一般用户的用法小结
  • html手机网站模板html5网页设计教程
  • 【Mac】开发环境使用/维护
  • 网站代码设计惠州网站建设排名
  • 精美网站建设wordpress gae
  • 【STM32MP157 异核通信框架学习篇】(10)Linux下Remoteproc相关API (下)
  • 企业建站服务退役军人215专业品牌网站建设
  • 杭州模板网站建站做国外夏令营的网站
  • 基于SpringBoot的房屋租赁管理系统【协同过滤推荐算法+可视化统计+合同签署】
  • 【MySQL | 基础】函数
  • Java Set
  • (60页PPT)数据治理与数据安全防护方案(附下载方式)
  • DSAC-T算法实现控制倒立摆
  • 学校网站建设需要多少钱wordpress添加首页导航
  • 开发区网站制作公司wordpress+系统安装
  • 什么是性能测试?它的分类?(负载测试、压力测试、并发测试等)
  • 4.3 Go 协程:goroutine
  • 查询缓存8.0
  • 【PostgreSQL】查询所有表和视图
  • 页面布局练习
  • Cortex-M3 02-地址映射
  • 大丰做网站哪家公司好大理州城乡建设局官方网站
  • 推荐做素菜的网站电商网站开发环境怎么写
  • 企业建设网站的功能是什么意思wordpress单用户案例
  • 曼朗策划网站建设新闻源
  • 网站美工怎么做网站注册时间查询
  • 网站开发 免代码网站三网合一
  • 网站的建设服务平台昆山网站制作