Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍
ToolBar
工具栏组件以及与之类似的
MenuBar
菜单栏组件的常用方法及灵活运用。
1.1 QToolBar 工具栏
QToolBar
是 Qt 中用于创建工具栏的组件,它为用户提供了一个方便的方式来组织和访问应用程序中的各种工具和操作。工具栏通常用于快速访问常用的功能,提高用户体验。
1.1.1 主要特点
-
工具按钮:
QToolBar
主要由工具按钮组成,每个工具按钮代表一个功能或操作。工具按钮可以包含文本、图标,也可以与相应的槽函数关联,实现用户点击按钮时触发相应的操作。 - 分组和弹出菜单: 工具栏支持将工具按钮分组,使界面更加清晰。还可以为工具按钮添加弹出菜单,以提供额外的选项。
- 可调整性: 用户可以在工具栏上自由拖动工具按钮,重新排列它们的位置。这增加了用户定制界面的灵活性。
- 自定义小部件: 除了工具按钮,工具栏还支持添加自定义的小部件,例如搜索框、进度条等,以满足特定需求。
- 样式和布局: 可以通过设置样式和布局来定制工具栏的外观,包括工具按钮的样式、大小和排列方式。
-
菜单项:
QMenuBar
主要由菜单项组成,每个菜单项代表一个功能或操作。菜单项可以包含子菜单,形成层级关系,用于更好地组织功能。 - 快捷键: 每个菜单项可以关联一个快捷键,用户可以通过键盘快捷键来触发相应的操作。
- 分组和分割线: 菜单栏支持在菜单项之间添加分组和分割线,用于更好地区分不同的功能模块。
-
动作关联:
菜单项通常与具体的动作(
QAction
)关联,点击菜单项时触发相应的动作。 -
上下文菜单:
QMenuBar
也可以用作上下文菜单(右键菜单),在特定区域点击右键时显示相应的菜单项。
以下是
QToolBar
类的一些常用方法的说明和概述,以表格形式列出:
QToolBar(QWidget *parent = nullptr)
构造函数,创建一个
QToolBar
对象。
addAction(QAction *action)
向工具栏中添加一个动作。
addWidget(QWidget *widget)
向工具栏中添加一个小部件。
addSeparator()
向工具栏中添加一个分隔符。
clear()
清除工具栏上的所有动作和小部件。
setOrientation(Qt::Orientation orientation)
设置工具栏的方向,可以是水平 (
Qt::Horizontal
) 或垂直 (
Qt::Vertical
)。
setMovable(bool movable)
设置工具栏是否可以被用户移动。
setIconSize(const QSize &size)
设置工具栏中动作的图标大小。
setToolButtonStyle(Qt::ToolButtonStyle style)
设置工具按钮的样式,可以是文本和图标一起显示、只显示图标、只显示文本等。
toggleViewAction()
返回一个切换工具栏可见性的动作。
addWidget(QWidget *widget)
在工具栏中添加一个自定义小部件。
clear()
清除工具栏上的所有动作和小部件。
setAllowedAreas(Qt::ToolBarAreas areas)
设置工具栏允许停靠的区域,可以是上、下、左、右、所有区域的组合。
setFloatable(bool floatable)
设置工具栏是否可以浮动。
setWindowTitle(const QString &title)
设置工具栏的标题。
addWidget(QWidget *widget)
在工具栏中添加一个自定义小部件。
widgetForAction(QAction *action) const
返回与给定动作相关联的小部件。
这些方法提供了对
QToolBar
进行动作、小部件和外观等方面的控制,使其适应不同的应用场景。你可以根据具体需求使用这些方法,定制工具栏的外观和行为。
1.2 QMenuBar 菜单栏
QMenuBar
是 Qt 中用于创建菜单栏的组件,它提供了一种方便的方式来组织和管理应用程序的菜单。菜单栏通常用于将应用程序的功能划分为不同的菜单,使用户可以轻松访问各种操作。
1.2.1 主要特点
以下是
QMenuBar
类的一些常用方法的说明和概述,以表格形式列出:
QMenuBar(QWidget *parent = nullptr)
构造函数,创建一个
QMenuBar
对象。
addMenu(const QString &title)
添加一个具有给定标题的菜单,并返回一个指向新菜单的指针。
addMenu(QMenu *menu)
添加给定的菜单。
addSeparator()
在菜单栏上添加一个分隔符。
addActions(QList<QAction*> actions)
添加给定的动作列表到菜单栏。
clear()
清除菜单栏上的所有菜单和分隔符。
setNativeMenuBar(bool nativeMenuBar)
设置是否使用本地菜单栏,如果为
true
,则菜单栏将使用本地系统的菜单栏实现。
setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopLeftCorner)
在指定的角落放置一个小部件。
addMenu(QMenu *menu)
添加给定的菜单。
setActiveAction(QAction *action)
设置活动动作,该动作将在菜单栏上显示为活动状态。
addMenu(const QString &title)
添加一个具有给定标题的菜单,并返回一个指向新菜单的指针。
setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopLeftCorner)
在指定的角落放置一个小部件。
clear()
清除菜单栏上的所有菜单和分隔符。
setNativeMenuBar(bool nativeMenuBar)
设置是否使用本地菜单栏,如果为
true
,则菜单栏将使用本地系统的菜单栏实现。
setActiveAction(QAction *action)
设置活动动作,该动作将在菜单栏上显示为活动状态。
setCornerWidget(QWidget *widget, Qt::Corner corner = Qt::TopLeftCorner)
在指定的角落放置一个小部件。
这些方法提供了对
QMenuBar
进行菜单管理、外观设置以及与其他小部件的交互等方面的控制。你可以根据具体需求使用这些方法,定制菜单栏的外观和行为。
1.3 使用菜单组件
顶部工具栏
ToolBar
组件的定义有多种方式,我们可以直接通过代码生成,也可以使用图形界面
UI
添加,当需要使用
UI
实现时,只需要在
MainWindow
中选择添加工具来新增,默认会在窗口顶部增加,如果想要在四面增加可以使用
Add Tool Bar to Other Area
选项实现;
1.3.1 应用菜单组件
|
由于通过
connect
绑定到了每一个
Action
上,所以当用户点击不同的菜单时将会触发不同的匿名槽函数,代码中实现了弹窗提示,此处也可以替换成任意代码,运行效果图如下所示;
1.3.2 二级菜单联动
|
代码运行后读者可看到如下图所示的效果,在配置模式中增加了两个子菜单,每个子菜单分别绑定到了一个槽函数上,而其父菜单仅仅只是展示功能此处可以不增加任何实质性的功能。
1.3.3 增加右键菜单
我们可以将右击
customContextMenuRequested()
事件绑定到主窗口中,实现在窗体任意位置右击都可以弹出菜单栏,读者可以直接在主界面中点击右键转到槽,如下图;
当读者点击主窗体中的右键时则会触发
on_MainWindow_customContextMenuRequested
事件,该事件的内部则实现了创建菜单的功能,并通过
pMenu->exec(QCursor::pos())
的方式显示在鼠标点击位置处,其代码如下所示;
|
接着就需要绑定到特定的槽函数上,用于接收用户点击的菜单选项,并根据选项做出相应的判断,这里我们定义一个
onTaskBoxContextMenuEvent
函数,并在
MainWindow.h
头文件进行声明,其实现部分如下所示;
// 处理发送过来的信号 |
至此当我们再次使用右键点击主页面时,则会弹出一个个性化菜单栏,如下图所示;
1.3.4 增加顶部通栏
|
运行后读者可看到如下图所示的案例,我们只保留了最基本的按钮栏,这样看起来更加的清爽。