Bootstrap

qt QToolButton详解

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();
}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

;