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();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!