QT原生控件-QToolButton的使用及样式

前言


本文主要介绍的是使用代码生成的情况下对控件的介绍,包括拥有的功能及能修改的样式,也会说明在qtdesiner拖拽控件生成和使用代码生成控件的区别(如果有的话,遇到了的会说),此版本不属于最终版本,以后遇到什么新奇的点会继续更新!本文基于QT官方的文档进行的编写,QT版本为qt 5.14.0,编写环境为Windows11。不得不说官方文档真是个好东西,有时候有些不会的上去一看就能有灵感解决了,可惜没有中文版本的。

一、QToolButton初步介绍

QToolButton是专为工具栏、工具面板等场景设计的特殊按钮,和QPushButton类似,都是继承于QAbstractButton基类,但是QToolButton功能相比于QPushButton更多,适用于更紧凑的布局中。

QToolButton 与 QPushButton 的区别对比

特性QPushButtonQToolButton区别说明
主要用途通用按钮;适合对话框、表单、主界面等,像“确定”,“取消”等按钮工具栏/工具面板按钮;像绘图软件中的画笔、颜色选择器工具ToolButton 更适合专业工具栏环境
​​默认样式​​标准按钮样式;宽度和高度相对较大扁平/紧凑样式ToolButton 更节省空间,视觉更轻量
​图标+文字水平排列多种排列方式可选ToolButton 提供更灵活的布局选项
​菜单集成基本菜单支持高级菜单模式ToolButton 有更专业的菜单弹出控制
​动作关联支持但非主要用途核心功能ToolButton 与 QAction 无缝集成
箭头功能​​不支持可直接设置为箭头ToolButton 适合导航控制
​悬停效果无自动凸起支持 autoRaiseToolButton 有更丰富的交互反馈
大小策略​​适合对话框适合工具栏ToolButton 默认更小更紧凑
​常用场景对话框按钮、表单提交工具栏、绘图工具、专业控件根据使用位置选择合适控件

二、基本功能

1.创建

QToolButton *toolBtn = new QToolButton();//QToolButton没有带文本的构造函数

2.基本属性和方法

1)setAutoRaise
设置鼠标悬停时自动凸起效果

void setAutoRaise(bool enable)

在这里插入图片描述

2)autoRaise
检查是否启用自动凸起效果

bool autoRaise() const

3)setArrowType
设置箭头类型(替代图标)

void setArrowType(Qt::ArrowType type)
/*
    Qt::NoArrow - 无箭头(默认)
    Qt::UpArrow - 向上箭头
    Qt::DownArrow - 向下箭头
    Qt::LeftArrow - 向左箭头
    Qt::RightArrow - 向右箭头
*/

Qt::DownArrow
在这里插入图片描述

4)arrowType
获取当前箭头类型

Qt::ArrowType arrowType() const

5)toolButtonStyle
获取图标和文字的排列方式

Qt::ToolButtonStyle toolButtonStyle() const

6)setToolButtonStyle
设置图标和文字的排列方式

void setToolButtonStyle(Qt::ToolButtonStyle style)
/*
    Qt::ToolButtonIconOnly - 只显示图标
    Qt::ToolButtonTextOnly - 只显示文字
    Qt::ToolButtonTextBesideIcon - 文字在图标旁边
    Qt::ToolButtonTextUnderIcon - 文字在图标下方
    Qt::ToolButtonFollowStyle - 跟随系统样式
*/

Qt::ToolButtonTextBesideIcon
图标在文字的左边
在这里插入图片描述

7)setMenu
设置关联的下拉菜单

void setMenu(QMenu *menu)

8)menu
获取关联的菜单

QMenu *menu() const

9)setPopupMode
设置菜单弹出方式

void setPopupMode(QToolButton::ToolButtonPopupMode mode)
/*
    QToolButton::DelayedPopup - 延迟弹出(长按或特定操作)
    QToolButton::MenuButtonPopup - 显示分割按钮,点击不同部分触发不同操作
    QToolButton::InstantPopup - 立即弹出菜单(点击任何位置都弹出)
*/

QToolButton::DelayedPopup
长按左键,一段时间后展开菜单
在这里插入图片描述

QToolButton::MenuButtonPopup
单独拉出一个部分,用于点击展开菜单
在这里插入图片描述

QToolButton::InstantPopup
设置这个展开模式之后,点击按钮,会立即展开菜单,同时,你默认添加的action将不会被触发,这和前两个不同,前两个都会触发默认添加的action。
在这里插入图片描述

10)popupMode
获取菜单弹出方式

QToolButton::ToolButtonPopupMode popupMode() const

11)setDefaultAction
设置默认动作

void setDefaultAction(QAction *action);

注意问题:调用了setDefaultAction之后,之前设置的按钮上的文字,就消失不见了,后面我找到了原因,那就是你设置了默认的action之后,如果你要显示文字,你就要将文字设置给你的默认的action,如下面所示:

QAction action = new QAction(this);
action->setText("测试文字");
toolButton->setDefaultAction(action);

12)defaultAction
获取默认动作

QAction *defaultAction() const;

3.扩展中。。。。

三、信号

1)triggered
这个是当某个action触发时,发射的信号,可以根据这个信号,来实现对应的细节。

void triggred(QAction *action);

四、QToolButton样式

伪状态

QToolButton和QPushButton的样式基本是一样的,选择器没有,但是伪状态一大堆,熟练运用的话能开发出很多好看的样式。
:hover
鼠标悬停时触发

QToolButton:hover 
{
    background-color: #45a049;
}

:pressed
鼠标按下时触发

QToolButton:pressed 
{
    background-color: #3e8e41;
}

:disabled
QToolButton使用setDisable(true)时触发

QToolButton:disabled 
{
    background-color: #cccccc;
    color: #666666;
}

:checked
QToolButton为checked状态时触发,需要将setCheckable打开

QToolButton:checked 
{
    background: transparent;
    border: 1px solid #999;
}

:!checked
QToolButton为dischecked状态时触发

QToolButton:!checked
{
    background: transparent;
    border: 1px solid #999;
}

:flat
QToolButton为扁平状态时触发

QToolButton:flat 
{
    background: transparent;
    border: 1px solid #999;
}

后面还会更新一篇关于QToolButton\QPushButton的一些样式,可以期待下。

本次分享就到这里了,如果有什么错误的话请指正,或者有什么疑问的,也可以在评论区一起探讨!

### 自定义 QToolButton 外观 为了自定义 `QToolButton` 的外观,可以利用 Qt 样式表 (stylesheet) 来实现。样式表允许通过 CSS 类似的语法来修改控件的视觉属性。 #### 基本样式设置 下面是一个简单的例子展示如何改变按钮背景颜色、边框以及字体大小: ```css QToolButton { background-color: lightgray; border-style: outset; border-width: 2px; border-radius: 10px; border-color: beige; padding: 5px; font-size: 14pt; } ``` 此段代码会应用到所有的 `QToolButton` 实例上[^1]。 #### 设置不同状态下的样式 还可以针对不同的鼠标交互事件定制特定的状态样式,比如按下时的效果或是悬停效果: ```css QToolButton:hover { background-color: darkgray; } QToolButton:pressed { background-color: gray; border-style: inset; } ``` 这些规则会在用户将光标移到按钮上方或点击按钮时生效。 #### 使用图标和文本混合显示 当希望同时显示图标与文字时,可以通过如下方式调整布局方向及间距: ```css QToolButton { icon-size: 20px; tool-button-style: ToolButtonTextBesideIcon; /* 文字位于图标的旁边 */ spacing: 5px; /* 图标与文字之间的距离 */ } ``` 这使得工具按钮不仅限于仅含图标或仅有标签,而是两者兼备并合理排列[^2]。 #### 应用样式表至单个组件 要为单独的一个 `QToolButton` 添加上述样式,可以在创建对象之后调用其 `setStyleSheet()` 方法传入相应的字符串形式的样式声明;如果是整个应用程序范围内统一风格,则可在主窗口初始化阶段全局设定。 ```cpp // C++ 示例 toolButton->setStyleSheet("QToolButton { ... }"); ``` 或者,在 Python 中: ```python # PyQt 或 PySide 示例 tool_button.setStyleSheet(""" QToolButton { ... } """) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值