前言
本文主要介绍的是使用代码生成的情况下对控件的介绍,包括拥有的功能及能修改的样式,也会说明在qtdesiner拖拽控件生成和使用代码生成控件的区别(如果有的话,遇到了的会说),此版本不属于最终版本,以后遇到什么新奇的点会继续更新!本文基于QT官方的文档进行的编写,QT版本为qt 5.14.0,编写环境为Windows11。不得不说官方文档真是个好东西,有时候有些不会的上去一看就能有灵感解决了,可惜没有中文版本的。
一、QToolButton初步介绍
QToolButton是专为工具栏、工具面板等场景设计的特殊按钮,和QPushButton类似,都是继承于QAbstractButton基类,但是QToolButton功能相比于QPushButton更多,适用于更紧凑的布局中。
QToolButton 与 QPushButton 的区别对比
特性 | QPushButton | QToolButton | 区别说明 |
---|---|---|---|
主要用途 | 通用按钮;适合对话框、表单、主界面等,像“确定”,“取消”等按钮 | 工具栏/工具面板按钮;像绘图软件中的画笔、颜色选择器工具 | ToolButton 更适合专业工具栏环境 |
默认样式 | 标准按钮样式;宽度和高度相对较大 | 扁平/紧凑样式 | ToolButton 更节省空间,视觉更轻量 |
图标+文字 | 水平排列 | 多种排列方式可选 | ToolButton 提供更灵活的布局选项 |
菜单集成 | 基本菜单支持 | 高级菜单模式 | ToolButton 有更专业的菜单弹出控制 |
动作关联 | 支持但非主要用途 | 核心功能 | ToolButton 与 QAction 无缝集成 |
箭头功能 | 不支持 | 可直接设置为箭头 | ToolButton 适合导航控制 |
悬停效果 | 无自动凸起 | 支持 autoRaise | ToolButton 有更丰富的交互反馈 |
大小策略 | 适合对话框 | 适合工具栏 | 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的一些样式,可以期待下。
本次分享就到这里了,如果有什么错误的话请指正,或者有什么疑问的,也可以在评论区一起探讨!