QToolButton

news2024/11/25 20:24:49

QToolButton

  • API
  • 使用方式

使用方法和功能跟QPushButton基本一致, 只不过在对于关联菜单这个功能点上, QToolButton类可以设置弹出的菜单的属性, 以及在显示图标的时候可以设置更多的样式, 可以理解为是一个增强版的QPushButton。

API

/ 构造函数 /
QToolButton::QToolButton(QWidget *parent = nullptr);

/// 公共成员函数 ///
/*
    1. 将给定的菜单与此工具按钮相关联。
    2. 菜单将根据按钮的弹出模式显示。
    3. 菜单的所有权没有转移到“工具”按钮(不能建立父子关系)
*/
void QToolButton::setMenu(QMenu *menu);
// 返回关联的菜单,如果没有定义菜单,则返回nullptr。
QMenu *QToolButton::menu() const;

/*
弹出菜单的弹出模式是一个枚举类型: QToolButton::ToolButtonPopupMode, 取值如下:
    - QToolButton::DelayedPopup: 
        - 延时弹出, 按压工具按钮一段时间后才能弹出, 比如:浏览器的返回按钮
        - 长按按钮菜单弹出, 但是按钮的 clicked 信号不会被发射
    - QToolButton::MenuButtonPopup: 
        - 在这种模式下,工具按钮会显示一个特殊的箭头,表示有菜单。
	- 当按下按钮的箭头部分时,将显示菜单。按下按钮部分发射 clicked 信号
    - QToolButton::InstantPopup: 
        - 当按下工具按钮时,菜单立即显示出来。
        - 在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号
*/
// 设置弹出菜单的弹出方式
void setPopupMode(QToolButton::ToolButtonPopupMode mode);
// 获取弹出菜单的弹出方式
QToolButton::ToolButtonPopupMode popupMode() const;

/*
QToolButton可以帮助我们在按钮上绘制箭头图标, 是一个枚举类型, 取值如下: 
    - Qt::NoArrow: 没有箭头
    - Qt::UpArrow: 箭头向上
    - Qt::DownArrow: 箭头向下
    - Qt::LeftArrow: 箭头向左
    - Qt::RightArrow: 箭头向右
*/
// 显示一个箭头作为QToolButton的图标。默认情况下,这个属性被设置为Qt::NoArrow。
void setArrowType(Qt::ArrowType type);
// 获取工具按钮上显示的箭头图标样式
Qt::ArrowType arrowType() const;

/ 槽函数 /
// 给按钮关联一个QAction对象, 主要目的是美化按钮
[slot] void QToolButton::setDefaultAction(QAction *action);
// 返回给按钮设置的QAction对象
QAction *QToolButton::defaultAction() const;




/*
图标的显示样式是一个枚举类型->Qt::ToolButtonStyle, 取值如下:
    - Qt::ToolButtonIconOnly: 只有图标, 不显示文本信息
    - Qt::ToolButtonTextOnly: 不显示图标, 只显示文本信息
    - Qt::ToolButtonTextBesideIcon: 文本信息在图标的后边显示
    - Qt::ToolButtonTextUnderIcon: 文本信息在图标的下边显示
    - Qt::ToolButtonFollowStyle: 跟随默认样式(只显示图标)
*/
// 设置的这个属性决定工具按钮是只显示一个图标、只显示文本,还是在图标旁边/下面显示文本。
[slot] void QToolButton::setToolButtonStyle(Qt::ToolButtonStyle style);
// 返回工具按钮设置的图标显示模式
Qt::ToolButtonStyle toolButtonStyle() const;


// 显示相关的弹出菜单。如果没有这样的菜单,这个函数将什么也不做。这个函数直到弹出菜单被用户关闭才会返回。
[slot] void QToolButton::showMenu();

使用方式

通过API的介绍, 我们可以知道, 使用QToolButton这种类型的按钮, 有三种使用方式:

  1. 作为普通按钮, 可以显示文本信息和图标
  2. 按钮的图标可以使用不同的方式设置, 并且制定图标和文本信息的显示模式
  3. 设置check属性, 使其可以处于持续的被选中状态
  4. 关联一个菜单, 点击按钮菜单弹出, 并且可以设置菜单的弹出方式

具体操作可以参考如下代码:

#include "myqtoolbutton.h"
#include "ui_myqtoolbutton.h"
#include "QDebug"
#include "QToolButton"
#include "QAction"
#include "QMenu"

myQToolButton::myQToolButton(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::myQToolButton)
{
    ui->setupUi(this);
    this->ui->normalBtn->setText("normalBtn");
    this->ui->normalBtn->setIcon(QIcon("C://Users//DYF//Pictures//Camera Roll//a.png"));
    this->ui->normalBtn->setIconSize(QSize(30,30));
    connect(ui->normalBtn, &QToolButton::clicked, this, [=]()
    {
         qDebug() << "我是一个普通按钮, 是一个屌丝...";
    });
    // 设置图标和文本的显示模式(如果不设置显示模型,有图标和文本默认只显示图标)
    this->ui->normalBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);

    //actionBtn
    //基于QAction的方式给按钮设置图标和文本信息
    QAction* actBtn = new QAction(QIcon("C://Users//DYF//Pictures//Camera Roll//a.png"), "奥利给");
    this->ui->actionBtn->setDefaultAction(actBtn);
    // 设置图标和文本的显示模式
    this->ui->actionBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    connect(ui->actionBtn, &QToolButton::triggered, this, [=](QAction* act)
    {
        act->setText("我是修改之后的马里奥...");
        act->setIcon(QIcon("C://Users//DYF//Pictures//Camera Roll//b.png"));
    });


    //arrowBtn
    // 基于自带样式, 给按钮设置箭头图标
    this->ui->arrowBtn->setArrowType(Qt::UpArrow);
    this->ui->arrowBtn->setText("向上");
    // 设置图标和文本的显示模式
    this->ui->arrowBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    //checkedBtn
    // 有checked属性的按钮
    this->ui->checkedBtn->setCheckable(true);
    connect(ui->checkedBtn, &QToolButton::toggled, this, [=](bool bl)
    {
         qDebug() << "我是一个checked按钮, 当前状态为:" << bl;
    });

    //关联菜单
    this->ui->menuBtn->setText("你喜欢哪种美女?");
    QMenu* menu = new QMenu;
    QAction* act = menu->addAction("可爱的");
    menu->addAction("粘人的");
    menu->addAction("胸大的");
    menu->addAction("屁股翘的");
    this->ui->menuBtn->setMenu(menu);   //需要长按才能显示出菜单
    connect(act, &QAction::triggered, this, [=]{
        qDebug() << "我是一个可爱的女人, 今晚约吗?";
    });
    //点击按钮的时候调用显示菜单函数
    connect(ui->menuBtn,&QToolButton::clicked,this,[=]{
        ui->menuBtn->showMenu();
    });


    //popmenu
    this->ui->popmenu->setMenu(menu);
    /*
    弹出菜单的弹出模式是一个枚举类型: QToolButton::ToolButtonPopupMode, 取值如下:
      - QToolButton::DelayedPopup:
          - 延时弹出, 按压工具按钮一段时间后才能弹出, 比如:浏览器的返回按钮
          - 长按按钮菜单弹出, 但是按钮的 clicked 信号不会被发射
      - QToolButton::MenuButtonPopup:
          - 在这种模式下,工具按钮会显示一个特殊的箭头,表示有菜单。
      - 当按下按钮的箭头部分时,将显示菜单。按下按钮部分发射 clicked 信号
      - QToolButton::InstantPopup:
          - 当按下工具按钮时,菜单立即显示出来。
          - 在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号
    */
    this->ui->popmenu->setPopupMode(QToolButton::MenuButtonPopup);
    // 测试关联了菜单的按钮是否会发射clicked信号
    connect(ui->popmenu, &QToolButton::clicked, this, [=]()
    {
        qDebug() << "我是popMenu按钮, 好痒呀...";
    });

}

myQToolButton::~myQToolButton()
{
    delete ui;
}

显示图标的三种方式:
this->ui->normalBtn->setIcon(QIcon(“C://Users//DYF//Pictures//Camera Roll//a.png”));
this->ui->actionBtn->setDefaultAction(actBtn);
this->ui->arrowBtn->setArrowType(Qt::UpArrow);

菜单的三种弹出方式

void setPopupMode(QToolButton::ToolButtonPopupMode mode);

  • QToolButton::DelayedPopup:
    - 延时弹出, 按压工具按钮一段时间后才能弹出, 比如:浏览器的返回按钮
    - 长按按钮菜单弹出, 但是按钮的 clicked 信号不会被发射
    - QToolButton::MenuButtonPopup:
    - 在这种模式下,工具按钮会显示一个特殊的箭头,表示有菜单。
    - 当按下按钮的箭头部分时,将显示菜单。按下按钮部分发射 clicked 信号
    - QToolButton::InstantPopup:
    - 当按下工具按钮时,菜单立即显示出来。
    - 在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言小练习(二)

&#x1f31e; “去努力吧&#xff0c;最坏的结果不过是大器晚成&#xff01;” Day02 &#x1f4dd; 一.选择题&#x1f4dd;二.编程题 &#x1f4dd; 一.选择题 1.&#x1f388;、以下程序段的输出结果是&#xff08; &#xff09; #include <stdio.h> int main() {…

蚂蚁区块链投票案例(一)---蚂蚁链简介

文章目录 摘要背景蚂蚁链简介联盟链&#xff08;合约体验链&#xff09;开放联盟链开发者测试链 总结遗留问题测试环境和生产环境的问题&#xff1f; 摘要 计划用三篇文章&#xff0c;一个月左右的时间来实现一个蚂蚁开放联盟链上的区块链投票案例&#xff0c;本文是系列第一篇…

设计模式(8)外观模式

一、 1、使用背景&#xff1a;降低访问复杂系统的内部子系统时的复杂度&#xff0c;简化客户端之间的接口。 2、定义&#xff1a; 为子系统中的一组接口定义一个一致的界面&#xff0c;此模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。完美地体现…

恒运资本:科创板与创业板的区别?

近年来&#xff0c;跟着技能的飞速发展和立异认识的提高&#xff0c;科技立异成为了各国和企业竞相争夺的方向。在中国&#xff0c;“科创板”和“创业板”成为了人们重视的焦点。它们都是现代股票交易商场上的板块&#xff0c;但两者之间有何差异呢&#xff1f;下面从多个视点…

【allegro 17.4软件操作保姆级教程十一】表贴器件封装制作

&#x1f449;个人主页&#xff1a; highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 目录 封装组成元素 焊盘类型 表贴器件封装制作 环境设置 计算坐标 放置pin脚 …

pytorch基础实践-数据与预处理

文章目录 数据集Fashion-MNIST 数据集 数据预处理包的导入在Pytorch中进行 ETL利用torchvison包获取和处理数据集&#xff08;ET&#xff09; 访问数据集访问和查看 train_set 中的单个数据利用 DataLoader 成批访问数据 数据集 Fashion-MNIST 数据集 MNIST MNIST&#xff0c;…

day1 链表专题 牛客TOP100 BM 1-10

文章目录 链表BM1 反转链表BM2 链表内指定区间反转BM3 链表中的节点每k个一组翻转BM4 合并两个排序的链表BM5 合并k个已排序的链表BM6 判断链表中是否有环BM7 链表中环的入口结点BM8 链表中倒数最后k个结点BM9 删除链表的倒数第n个节点BM10 两个链表的第一个公共结点 链表 BM1…

ssm+vue绿色农产品推广应用网站源码和论文PPT

ssmvue绿色农产品推广应用网站041 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高…

浅谈限流式保护器在电气线路火灾中的应用

安科瑞 华楠 电气线路起火的主要原因 1.线路短路 所谓短路就是交流电路的两根导线互相触碰&#xff0c;电流不经过线路中的用电设备&#xff0c;而直接形成回路。由于电线本身的电阻比较小&#xff0c;若仅是通过电线这个回路&#xff0c;电流就会急剧变大&#xff0c;比正常情…

HAProxy的配置与搭建

Haproxy概念 HAProxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理&#xff0c;是免费、快速并且可靠的一种解决方案。HAProxy非常适用于并发大&#xff08;并发量达1w以上&#xff09;web站点&#xff0c;这些站点通常又需要会话保持或七层处理。HAProxy的运行模式…

MySQL创建表报错

CREATE TABLE IF NOT EXISTS nhooo_b1 (nhooo_id INT UNSIGNED AUTO_INCREMENT,nhooo_title VARCHAR(100) NOT NULL,nhooo_author VARCHAR(40) NOT NULL,submission_date DATE,PRIMARY KEY (nhooo_id) ) ENGINEINNODB DEFAULT CHARSETutf8;创建表始终报以下错误&#xff1a; 这…

Linux操作系统调度基本准则和实现

今天分享一篇处理器调度相关的理论介绍文章。 1&#xff0c;基本概念 在多道程序系统中&#xff0c;进程的数量往往多于处理机的个数&#xff0c;进程争用处理机的情况就在所难免。处理机调度是对处理机进行分配&#xff0c;就是从就绪队列中&#xff0c;按照一定的算法&…

k8s-ingress-context deadline exceeded

报错&#xff1a; rancher-rke-01:~/rke # helm install rancher rancher-latest/rancher --namespace cattle-system --set hostnamewww.rancher.local Error: INSTALLATION FAILED: Internal error occurred: failed calling webhook "validate.nginx.ingress.kube…

【使用Node.js搭建自己的HTTP服务器】

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

二叉搜索树的(查找、插入、删除)

一、二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 1、若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值&#xff1b; 2、若它的右子树不为空&#xff0c;则右子树上所有节点的值都…

使用rook搭建Ceph集群

宿主机&#xff1a; MacBook Pro&#xff08;Apple M2 Max&#xff09; VMware Fusion Player 版本 13.0.2 VM软硬件&#xff1a; ubuntu 22.04.2 4核 CPU&#xff0c;5G 内存&#xff0c;40G硬盘 *每台机器分配硬件资源很重要&#xff0c;可以适当超过宿主机的资源量&am…

张驰咨询:有效导入精益生产咨询,企业提升竞争力的关键

精益生产是一种源于日本的先进生产管理理念&#xff0c;旨在通过消除生产过程中的浪费&#xff0c;提高生产效率和质量&#xff0c;降低成本&#xff0c;从而提升企业的竞争力。在我国&#xff0c;越来越多的企业开始尝试导入精益生产咨询&#xff0c;但效果并不尽如人意。为了…

关于slot-scope已经废弃的问题

说起来啊&#xff0c;这个问题啊&#xff0c;我之前一直没关注&#xff0c;还是webstorm给我的警告。 因为使用了element-ui的组件库&#xff0c;所以在使用组件的时候往往就cv大法了&#xff0c;直到今天用webstorm写代码是&#xff0c;提示了如下的错误 我这一看&#xff0c…

伦敦金短线好还是长线好

在伦敦金投之中&#xff0c;长期有一个争论很久的问题&#xff0c;那就是伦敦金投资究竟是长线好还是短线好&#xff1f;不同的投资者对这个问题有不同的看法&#xff0c;一般认为&#xff0c;伦敦金投资比较适合短线交易。笔者也将讨论这个问题&#xff0c;看看伦敦金投资是不…

《网络是怎样连接的》(四)

本文主要取材于 《网络是怎样连接的》 第四章。 目录 4.1 互联网的基本结构 4.2光纤接入网&#xff08;FTTH&#xff09; 4.3 接入网中使用的PPP和隧道 4.4 网络运营商的内部 4.5 跨越运营商的网络包 简述&#xff1a;本文主要内容是解释 网络包是如何通过互联网接入路由…