qt5-入门-工具栏toolBar介绍+实例

参考:
QT系统学习系列:1.2 ToolBar(工具栏)qt toolbar-CSDN博客
https://blog.csdn.net/Fdog
/article/details/113333449

C++ GUI Programming with Qt 4, Second Edition

本地环境:
win10专业版,64位,Qt5.12



ToolBar属性介绍

movable

指示toolBar是否可以移动,默认是true。比如可以把toolBar移动为竖向,如下图所示。

代码使用isMovable()和setMovable()访问和设置。
在这里插入图片描述

allowedAreas

指工具栏可以移动的范围。如果选择NoToolBarArea,表示可以放在任何地方。

代码使用allowedAreas()和setAllowedAreas()访问和设置。

Orientation

指工具栏的方向,默认是水平的。如果该工具栏是QMainWindow管理时,不应该修改(实际改了效果也不变)。

代码使用orientation()和setOrientation()访问和设置。

如果想把已添加到主窗口中的工具栏移动到另一个ToolBarArea,应该使用QMainWindow::addToolBar()或者QMainWindow::insertToolBar()

toolButtonStyle

约定了icon和text的显示方式。
在这里插入图片描述
含义与字面意义相同。其中,beside是icon在左,文字在右;follow是根据QStyle::StyleHint格式显示的。

StyleHint

是一个用于指示样式的特定提示信息的枚举类型。它提供了一些预定义的提示信息,可用于在绘制或布局UI组件时影响样式的行为。

常用值包括:

  • SH_ToolButton_Underline:指示工具按钮是否显示下划线来标识键盘快捷键。

  • SH_ItemView_ArrowKeysNavigateIntoChildren:指示是否使用方向键导航进入子项。

  • SH_TabBar_Alignment:指示 TabBar 中选项卡的对齐方式。

StyleHint可以通过QStyle类的styleHint方法来访问和设置。例如

QStyleOptionButton option;
bool underline = style()->styleHint(QStyle::SH_ToolButton_Underline, &option);

floatable

指是否可以将工具栏作为独立窗口进行拖放,默认是true。代码使用isFloatable()和setFloatable()访问和设置。

实例效果

在这里插入图片描述

实现

首先在设计页面,新增一个toolbar。这里我起名叫serviceToolBar。
在这里插入图片描述
下面开始给工具栏做布局。

首先,如果在mainwindow上新建两个toolBar,那么即使将两个的方向都设置为vertical,第二个也会是水平的(我考虑过给两个toolBar分别做垂直布局,让一个setAlignment(Qt::AlignTop),一个AlignBottom,很不幸,第二个toolBar还是水平)。所以这里我干脆只使用一个toolBar,难点就在于如何在中间制造一段空白。

制造空白的思路就是做一个QAction,里面包含一个可以扩展高度的spacer,那么spacer后添加的QAction,自然可以沉到底部。

下面是代码,注释很清楚了,不再多说。其中:

  • 各个QAction都是已经实现好的功能
  • createToolBars()放置在MainWindow的构造函数之中,ui->setupUi(this);之后。
void MainWindow::createToolBars() {
    // 上面的action
    ui->serviceToolBar->addAction(ui->actionSynoOnline);
    ui->serviceToolBar->addAction(ui->actionDNAStudioOnline);
    ui->serviceToolBar->addAction(ui->actionToolsOnline);
    ui->serviceToolBar->addAction(ui->actionOrderSysOnline);

    // 中间制造一些空间
    QWidget* customWidget = new QWidget();
    // 创建布局
    QBoxLayout* layout = new QVBoxLayout(customWidget);
    layout->setContentsMargins(0, 0, 0, 0);
    // 参数说明:第一个参数是Spacer的宽度,第二个是高度,单位像素
    // 第三个参数是Spacer在水平方向上、调整大小时使用的策略
    // Preferred表示占用常规的空间
    // 第四个参数是Spacer在垂直方向上、调整大小时使用的策略
    // Expanding表示可以扩展以填充多余的空间
    layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Preferred, QSizePolicy::Expanding));
    // 将QWidget包装成一个QAction
    QWidgetAction* widgetAction = new QWidgetAction(this);
    widgetAction->setDefaultWidget(customWidget);
    // 再将QAction添加到QToolBar
    ui->serviceToolBar->addAction(widgetAction);

    // 添加一个隔断
    ui->serviceToolBar->addSeparator();

    // 添加剩余的几个action
    ui->serviceToolBar->addAction(ui->actionContact);
    ui->serviceToolBar->addAction(ui->actionSettings);

}
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值