QToolButton是Qt框架中的一个特殊且功能丰富的控件,它主要用于工具栏或类似场景中,为用户提供快速访问命令或选项的按钮。通常是文字或图片或者图片+文字!
构造函数
explicit QToolButton(QWidget *parent = nullptr);
初始化+添加图片
QToolButton *toolBtn = new QToolButton(this);toolBtn->setGeometry(200,0,50,50);toolBtn->setIcon(QIcon(":/img/1.png"));QToolButton *toolBtn1 = new QToolButton(this);toolBtn1->setGeometry(150,0,50,50);toolBtn1->setIconSize(QSize(30,30));toolBtn1->setIcon(QIcon(":/img/6.png"));
设置文字
QToolButton有一个ToolButtonStyle 的属性,默认只显示图片,不显示文字
void setToolButtonStyle(Qt::ToolButtonStyle style);
enum ToolButtonStyle {ToolButtonIconOnly,ToolButtonTextOnly,ToolButtonTextBesideIcon,ToolButtonTextUnderIcon,ToolButtonFollowStyle};
QToolButton *toolBtn1 = new QToolButton(this);toolBtn1->setGeometry(150,0,100,100);toolBtn1->setIconSize(QSize(30,30));toolBtn1->setIcon(QIcon(":/img/6.png"));toolBtn1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);toolBtn1->setText("其他");
设置按钮扁平化
autoRaise
属性可以控制toolButton
的扁平化,即按钮和界面齐平,不显示按钮的边框
当autoRaise
设置为True
时,如果鼠标悬停在工具按钮上,按钮会自动“抬起”或凸显,从而给用户一个视觉上的反馈,表明这是一个可以点击的按钮。
当autoRaise
设置为False
时,按钮将保持与界面齐平的状态,即使鼠标悬停在上面也不会有明显的变化。这种设置可能会使得按钮在视觉上不太显眼,但有时候也符合特定的设计需求。
QToolButton *toolBtn1 = new QToolButton(this);toolBtn1->setGeometry(150,0,100,100);toolBtn1->setIconSize(QSize(30,30));toolBtn1->setIcon(QIcon(":/img/6.png"));toolBtn1->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);toolBtn1->setAutoRaise(true);//扁平化
下拉菜单
QToolButton 可以配置一个下拉菜单,用户点击后会显示一系列选项。这对于将多个相关命令组织在一起非常有用
QToolButton *toolBtn1 = new QToolButton(this);toolBtn1->setGeometry(150,0,100,100);toolBtn1->setIconSize(QSize(30,30));toolBtn1->setIcon(QIcon(":/img/6.png"));toolBtn1->setAutoRaise(true);toolBtn1->setPopupMode(QToolButton::InstantPopup);//设置为弹出模式,非常关键,否则下拉不了QMenu *menu = new QMenu("菜单",toolBtn1);menu->addAction("Action 1");menu->addAction("Action 2");toolBtn1->setMenu(menu); // 设置下拉菜单
QToolButton 提供了三种弹出模式:
DelayedPopup(默认):长按才显示菜单。
InstantPopup:点击后立即显示菜单。
MenuButtonPopup:仅当点击菜单下拉按钮时才显示菜单(按钮旁边会显示一个小箭头)。
文字提示
toolBtn1->setToolTip("其他");
信号与槽实战
QToolButton *toolBtn = new QToolButton(this);toolBtn->setGeometry(200, 0, 50, 50);toolBtn->setIcon(QIcon(":/img/7.png"));toolBtn->setAutoRaise(true);toolBtn->setCheckable(true); // 确保按钮是可切换的connect(toolBtn, &QToolButton::toggled, this, [=](bool check) {if (check) {toolBtn->setIcon(QIcon(":/img/8.png"));} else {toolBtn->setIcon(QIcon(":/img/7.png"));}});QToolButton *toolBtn1 = new QToolButton(this);toolBtn1->setGeometry(300, 0, 50, 50);toolBtn1->setIcon(QIcon(":/img/7.png"));toolBtn1->setAutoRaise(true);toolBtn1->setCheckable(true); // 确保按钮是可切换的connect(toolBtn1, &QToolButton::toggled, this, [=](bool check) {if (check) {toolBtn1->setIcon(QIcon(":/img/8.png"));} else {toolBtn1->setIcon(QIcon(":/img/7.png"));}});QButtonGroup *group1 = new QButtonGroup(this);group1->addButton(toolBtn, 0);group1->addButton(toolBtn1, 1);
在Qt框架中,clicked()
和 toggled()
是两个常用的信号,但它们的用途和触发条件有所不同。
clicked()
信号
clicked()
信号通常用于按钮(如 QPushButton
)等控件,当用户点击这些控件时,会触发该信号。这是一个典型的鼠标交互信号,它不会保留按钮的状态(即按钮在点击后不会自动变为“按下”状态,除非显式设置)。
toggled()
信号
toggled()
信号则通常用于可切换状态的控件,如 QCheckBox
和 QRadioButton
。当这些控件的状态发生变化时(从选中到未选中,或从未选中到选中),会触发该信号。这种信号会保留控件的状态。