通常在工具栏内部使用,一般不显示文本标签,只显示一个图标,像这样
目录
1.1 创建QToolButton QToolButton()
5.1.1 QToolButton.DelayedPopup
5.1.2 QToolButton.MenuButtonPopup
6.1.1 把triggered绑给btn之后如何区分不同的行为
1 创建和基本显示操作
1.1 创建QToolButton QToolButton()
看上去和普通的按钮差不多
1.2 设置文字 setText()
我们先对其设置提示文字
运行结果
1.3 设置图标 setIcon()
我们现在再对其设置图标
运行结果
现在我们发现之前设置的文字没有了
- 现在我们得出结论,在QToolButton的默认情况下,文字与图标只能设置一种
1.4 改变图标大小 setIconSize()
我们现在调整一下这个图标的大小
发现这个图标变大了
1.5 设置提示文本 setToolTip()
提示文本:当我们在按钮上悬停一阵后,会显示提示文本
运行结果
2 工具按钮样式设置
上面我们试了一下,在默认的情况下,图标和文字是不能在QToolButton按钮中并存的,现在我们就想把它搞并存,此时我们应该设置其工具按钮样式
2.1 设置 setToolButtonStyle()
我们可以使用setToolButtonStyle()对其设置不同的样式,参数分别为
- Qt.ToolButtonIconOnly 仅显示图标
- Qt.ToolButtonTextOnly 仅显示文字
- Qt.ToolButtonTextBesideIcon 文本显示在图标旁边
- Qt.ToolButtonTextUnderIcon 文本显示在图标下方
- Qt.ToolButtonFollowStyle 默认风格
首先我们先创建一个QToolButton并对其设置文字与图标
此时它只执行后者
我们将ToolButtonStyle置为仅显示文字
此时的状态
仅显示图标
文本显示在图标旁边
文本显示在图标下方
默认风格
2.2 获取 toolButtonStyle()
这个函数的返回值是一个数字,从0到4依次对应:
- 0 - Qt.ToolButtonIconOnly 只有图标
- 1 - Qt.ToolButtonTextOnly 只有文字
- 2 - Qt.ToolButtonTextBesideIcon 文字在图旁边
- 3 - Qt.ToolButtonTextUnderIcon 文字在图下方
- 4 - Qt.ToolButtonFollowStyle 默认风格
在设置中,我们也可以使用数字0-4来代替上面的Qt.ToolButtonIconOnly等参数
3 设置箭头
此处的设置箭头为按钮上的图标
在工具按钮样式设置为默认时:
- 如果设置为非无箭头形式,会覆盖掉之前设置的图标或文本
- 如果是无箭头形式会展示出图标或文本
3.1 设置 setArrowType()
括号中可选的值有
- Qt.NoArrow 无箭头
- Qt.UpArrow 向上箭头
- Qt.DownArrow 向下箭头
- Qt.LeftArrow 向左箭头
- Qt.RightArrow 向右箭头
创建一个按钮后将其设置为无箭头
向上箭头
向下箭头
向左箭头
向右箭头
3.2 获取 arrowType()
这个函数会返回一个数字,数字0-4分别代表
- 0 - Qt.NoArrow 无箭头
- 1 - Qt.UpArrow 向上箭头
- 2 - Qt.DownArrow 向下箭头
- 3 - Qt.Qt.LeftArrow 向左箭头
- 4 - Qt.Qt.RightArrow 向右箭头
我们在设置时也可以用数字进行设置
如果工具按钮样式设置为配合使用时,箭头会当作图标处理,像下图这样
4 自动提升
在QToolButton中是没有扁平化的,自动提升功能与扁平化功能相似,
但是将PushButton设置扁平化后,鼠标往按钮上放,按钮在默认情况下是没有任何效果的
QToolButton的自动提升是先将按钮扁平化,之后使用鼠标放在按钮上,按钮有效果
4.1 设置 setAutoRaise()
运行后的状态
我们把鼠标放在按钮上
4.2 获取 autoRaise()
5 菜单和弹出模式
QToolButton与QPushButton的setMenu的功能是不太一样的
此时我们搞一个菜单并把菜单给QToolButton上
运行结果
此时我们点击这个按钮发现并不能弹出菜单
我们还需要对其进行弹出模式的设置
5.1 设置弹出模式 setPopupMode()
括号可以放:
- QToolButton.DelayedPopup 鼠标按住一会儿才显示
- QToolButton.MenuButtonPopup 有一个专门的指示箭头,点击箭头才显示
- QToolButton.InstantPopup 点了按钮就显示
5.1.1 QToolButton.DelayedPopup
我们按住按钮一会儿后,菜单出现了
这个功能在浏览器的后退按钮使用过,当我们按住后退按钮一阵后
他会产生之前的记录
5.1.2 QToolButton.MenuButtonPopup
右侧有一个箭头
我们点击一下
5.1.3 QToolButton.InstantPopup
我们点击了一下按钮
5.2 弹出模式对clicked信号的影响
设置不同的菜单弹出方式也会对按钮的clicked信号产生影响,但是无论是什么信号对菜单都没有影响
5.2.1 DelayedPopup 延时弹出
现在我们设置延迟弹出,之后将信号绑定一个槽函数
我们普通点击一下按钮后,槽函数会触发
我们长按之后,此时菜单出现,我们再点击一下别处,此时槽函数不会被触发
5.2.2 MenuButtonPopup 三角弹出
我们现在设置为点击旁边的小三角
此时我们点三角左侧的按钮可以触发槽函数,点按钮左侧的三角不可以触发槽函数
5.2.3 InstantPopup 点击按钮立即弹出
现在我们设置为立即弹出
此时我们点击按钮并不会触发槽函数
5.3 获取弹出模式 popupMode()
这个函数的返回值是一个数字,0-2分别对应:
- 0 - QToolButton.DelayedPopup 延时弹出
- 1 - QToolButton.MenuButtonPopup 点击按钮旁边的箭头弹出
- 2 - QToolButton.InstantPopup 按按钮弹出
6 菜单信号
我们首先设置一组菜单到按钮上
运行之后点击一下按钮
现在我们搞一个槽函数
给他连接上槽函数
我们现在点一下菜单中的行为
此时我们进入子菜单中的行为也会触发槽函数
6.1 区分不同的action
6.1.1 把triggered绑给btn之后如何区分不同的行为
那现在就有一个问题,我们怎么区分点击的不同行为
triggered可以传递出一个参数action
我们首先将这两个行为显示
运行后我们点击一次主菜单中的行为,再点击一次子菜单中的行为
运行结果
这个时候我们就可以对每个行为分别设置它所执行的语句了
我们将两个行为从方法中提取出来
更改槽函数
运行之后我们点击一下主菜单中的行为,然后再点击一下子菜单中的行为,运行结果
6.1.2 其他区分行为的方式
我们也可以把trigged信号直接绑给action
我们把btn连接取消掉后,增加action triggered连接
运行后我们点击一下主菜单中的行为,再点击一下子菜单中的行为,运行结果
6.2 发送数据 setData()
triggered发送信号是我么默认的信号,内容为action,我们也可以对这个内容进行更改
现在我们将发送的数据改为1,2
更改槽函数
现在我们点击一下主菜单中的行为,在点击一下子菜单中的行为