1、概述
QToolButton是Qt框架中的一个控件,它继承自QAbstractButton。QToolButton通常用于工具栏(QToolBar)中,提供了一种快速访问命令或选项的方式。与普通的QPushButton按钮相比,QToolButton通常只显示一个图标而不显示文本标签(尽管也可以显示文本),并且通常没有边框,在鼠标悬停和按下时的视觉反馈较轻。QToolButton的主要用途是在工具栏中提供辅助操作,而不是用于触发主要命令。
2、重要方法
QToolButton提供了多种方法来配置其外观和行为,以下是一些常用的方法:
setMenu(QMenu *menu)
:设置按钮的弹出菜单。setPopupMode(ToolButtonPopupMode mode)
:设置弹出菜单的显示模式,包括延迟弹出(DelayedPopup)、点击箭头立即弹出(MenuButtonPopup)和点击按钮立即弹出(InstantPopup)。setToolButtonStyle(Qt::ToolButtonStyle style)
:设置按钮的样式,包括仅显示图标(ToolButtonIconOnly)、仅显示文本(ToolButtonTextOnly)、文本在图标右侧(ToolButtonTextBesideIcon)和文本在图标下方(ToolButtonTextUnderIcon)。setArrowType(Qt::ArrowType type)
:设置按钮是否显示一个箭头,而不是一个正常的图标。setIcon(const QIcon &icon)
:设置按钮的图标。setText(const QString &text)
:设置按钮的文本。setAutoRaise(bool enable)
:设置是否在鼠标指向按钮时自动凸起。
3、重要信号
QToolButton也提供了多种信号来响应用户交互,以下是一些常用的信号:
clicked(bool checked = false)
:当按钮被点击时触发,参数checked表示按钮的选中状态。triggered(QAction *action)
:当有菜单项被触发时发送,可以使用action参数来获取触发的菜单项。
4、常用枚举类型
QToolButton中定义了一些枚举类型来配置其行为和外观,以下是一些常用的枚举类型:
ToolButtonPopupMode
:定义了工具按钮的弹出菜单模式,包括DelayedPopup(延迟弹出)、MenuButtonPopup(点击箭头图标后立即弹出)和InstantPopup(点击按钮后立即弹出)。ToolButtonStyle
:定义了工具按钮的样式,包括ToolButtonIconOnly(仅显示图标)、ToolButtonTextOnly(仅显示文本)、ToolButtonTextBesideIcon(文本在图标右侧)和ToolButtonTextUnderIcon(文本在图标下方)。ArrowType
:定义了按钮是否显示一个箭头,而不是一个正常的图标,包括NoArrow(不显示箭头)和其他箭头类型。
#include <QApplication>
#include <QMainWindow>
#include <QToolButton>
#include <QMenu>
#include <QVBoxLayout>
#include <QDebug>class MainWindow : public QMainWindow {Q_OBJECT
public:MainWindow(QWidget *parent = nullptr) : QMainWindow(parent) {setupUI();}private:void setupUI() {// 创建中心部件和布局QWidget *centralWidget = new QWidget(this);QVBoxLayout *layout = new QVBoxLayout(centralWidget);setCentralWidget(centralWidget);// 创建基本工具按钮QToolButton *basicBtn = new QToolButton();basicBtn->setText("基本按钮");basicBtn->setIcon(QIcon(":/icons/basic.png"));basicBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);connect(basicBtn, &QToolButton::clicked, this, &MainWindow::onBasicButtonClicked);layout->addWidget(basicBtn);// 创建带菜单的工具按钮QToolButton *menuBtn = new QToolButton();menuBtn->setText("菜单按钮");menuBtn->setIcon(QIcon(":/icons/menu.png"));menuBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);QMenu *menu = new QMenu(this);menu->addAction("选项1", this, &MainWindow::onMenuOption1);menu->addAction("选项2", this, &MainWindow::onMenuOption2);menu->addSeparator();menu->addAction("退出", this, &MainWindow::close);menuBtn->setMenu(menu);menuBtn->setPopupMode(QToolButton::MenuButtonPopup);layout->addWidget(menuBtn);// 创建自动浮起的工具按钮QToolButton *autoRaiseBtn = new QToolButton();autoRaiseBtn->setText("自动浮起按钮");autoRaiseBtn->setIcon(QIcon(":/icons/raise.png"));autoRaiseBtn->setAutoRaise(true);autoRaiseBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);connect(autoRaiseBtn, &QToolButton::clicked, this, &MainWindow::onAutoRaiseButtonClicked);layout->addWidget(autoRaiseBtn);// 设置窗口属性setWindowTitle("QToolButton Demo");resize(300, 200);}private slots:void onBasicButtonClicked() {qDebug() << "基本按钮被点击";}void onMenuOption1() {qDebug() << "选项1被选择";}void onMenuOption2() {qDebug() << "选项2被选择";}void onAutoRaiseButtonClicked() {qDebug() << "自动浮起按钮被点击";}
};int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow window;window.show();return app.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!