当前位置: 首页 > article >正文

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

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

           

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


http://www.kler.cn/a/418512.html

相关文章:

  • swagger使用指引
  • 线性调整器——耗能型调整器
  • vim-plug的自动安装与基本使用介绍
  • 算法设计-0-1背包动态规划(C++)
  • 蓝桥备赛指南(6)
  • cpp的STL与java的Collections Framework使用
  • 【树莓派5】移动热点获取树莓派IP并初次登录SSH
  • Linux Shell 脚本题目集(2)
  • LuaForWindows_v5.1.5-52.exe
  • JS的魔法三角:constructor、prototype与__proto__
  • WordPress 项目迁移的完整指南:步骤与注意事项
  • 【Android】从事件分发开始:原理解析如何解决滑动冲突
  • osg加载模型丢失纹理
  • 在oracle下载jdk显示400 Bad Request Request Header Or Cookie Too Large
  • pdf也算是矢量图——pdf大小调整--福昕pdf
  • 多源传感器构建机器人的Gazebo模型
  • 【遥感综合实习】专题二 多维度遥感数据分析 梁子湖流域土地利用与景观格局变化研究
  • 基于链表的基础笔试/面试题
  • Qt-界面优化QSS
  • 即时通讯| IM+RTC在AI技术加持下的社交体验
  • spaCy 入门与实战:强大的自然语言处理库
  • springboot(20)(删除文章分类。获取、更新、删除文章详细)(Validation分组校验)
  • API 与 SDK 之间的区别
  • QUAD-MxFE平台
  • 【LeetCode】3208.交替组II
  • 基于PHP的香水销售系统的设计与实现