Qt的QToolButton的使用

在C++中使用QToolButton的详细步骤如下:

1. 包含头文件

#include <QToolButton>
#include <QAction>
#include <QMenu>

2. 创建QToolButton实例

QToolButton *toolButton = new QToolButton(parentWidget); // parentWidget为父部件指针

3. 基础属性设置

// 设置图标(需提前添加资源文件)
toolButton->setIcon(QIcon(":/images/save.png"));// 设置提示文字
toolButton->setToolTip("保存文件");// 设置按钮风格:图标+文字垂直排列
toolButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);// 启用自动浮动效果
toolButton->setAutoRaise(true);

4. 添加菜单功能

// 创建弹出菜单
QMenu *contextMenu = new QMenu();
contextMenu->addAction("快速保存");
contextMenu->addAction("另存为...");// 设置菜单弹出模式
toolButton->setPopupMode(QToolButton::MenuButtonPopup); // 分离式菜单按钮
toolButton->setMenu(contextMenu);

5. 关联QAction(推荐方式)

QAction *saveAction = new QAction(QIcon(":/icons/save"), "保存");
saveAction->setShortcut(QKeySequence::Save);// 绑定Action到按钮
toolButton->setDefaultAction(saveAction);// 连接动作触发信号
connect(saveAction, &QAction::triggered, this, &MainWindow::handleSave);

6. 信号连接

// 响应主按钮点击
connect(toolButton, &QToolButton::clicked, this, &MainWindow::handleToolButtonClick);// 响应菜单项选择
connect(contextMenu, &QMenu::triggered, this, &MainWindow::handleMenuAction);

7. 样式自定义(可选)

// 通过样式表定制外观
toolButton->setStyleSheet("QToolButton { background: #f0f0f0; border-radius: 4px; }""QToolButton:hover { background: #e0e0e0; }""QToolButton:pressed { background: #d0d0d0; }"
);

完整示例代码

// 在窗口类构造函数中
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{// 创建工具栏QToolBar *toolBar = addToolBar("主工具栏");// 创建工具按钮QToolButton *saveBtn = new QToolButton(this);saveBtn->setIcon(QIcon(":/icons/save"));saveBtn->setToolTip(tr("保存文件 (Ctrl+S)"));saveBtn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);saveBtn->setAutoRaise(true);// 添加菜单QMenu *saveMenu = new QMenu();saveMenu->addAction("快速保存");saveMenu->addAction("另存为...");saveBtn->setPopupMode(QToolButton::MenuButtonPopup);saveBtn->setMenu(saveMenu);// 添加到工具栏toolBar->addWidget(saveBtn);// 信号连接connect(saveBtn, &QToolButton::clicked, this, &MainWindow::quickSave);connect(saveMenu, &QMenu::triggered,this, &MainWindow::handleSaveAction);
}// 槽函数实现
void MainWindow::quickSave()
{qDebug() << "执行快速保存操作...";
}void MainWindow::handleSaveAction(QAction *action)
{if(action->text() == "另存为...") {// 处理另存为逻辑}
}

关键特性说明:

  1. 弹出模式

    • InstantPopup:立即显示菜单,不触发clicked信号
    • MenuButtonPopup:显示菜单按钮,分别响应按钮和菜单
    • DelayedPopup:按住保持后显示菜单
  2. 按钮样式

    • 使用setToolButtonStyle()可设置:
      • Qt::ToolButtonIconOnly
      • Qt::ToolButtonTextOnly
      • Qt::ToolButtonTextBesideIcon
      • Qt::ToolButtonTextUnderIcon
  3. 自动提升效果

    • setAutoRaise(true)让按钮平时无边框,鼠标悬停时显示
  4. 注意事项

    • 当设置菜单后,不同弹出模式会影响clicked信号的触发
    • 推荐优先使用QAction来管理按钮状态
    • 图标尺寸建议使用标准工具栏尺寸(通常32x32或24x24)

通过合理配置这些属性和信号连接,可以创建出功能丰富的工具栏按钮,并与应用程序逻辑完美集成。

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

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

相关文章

Canvas进阶-2、可视化应用

前言 Canvas 可以用来创建各种 数据可视化 图表和图形&#xff0c;通过绘制不同的形状、线条和颜色来展示数据的特征和趋势。 数据可视化的基本原理是将数据转化为可视化的图形元素&#xff0c;以便人们更容易理解和分析数据。这涉及到以下几个方面&#xff1a; 数据映射&…

力扣-回溯-17 电话号码的字母组合

思路 和之前的回溯不同的是&#xff0c;要遍历完所有的数字&#xff0c;并且在单层递归逻辑里需要遍历一整个字符串 代码 class Solution { public:vector<string> letters {"", "", "abc", "def", "ghi", "…

Windows11切换回Windows10风格右键菜单

参考文章&#xff1a;Win11新版右键菜单用不惯&#xff1f;一键切换回Win10经典版&#xff01;-CSDN博客 以管理员权限运行命令行cmd 切换为经典旧版右键菜单&#xff0c;执行 reg.exe add “HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServe…

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统,不需要降级 v1.0.91 (2025)

小米AX3000T 路由器如何开启 SSH 安装 OpenWRT 系统&#xff0c;不需要降级 v1.0.91 &#xff08;2025&#xff09; 本文内容需要你有一定的 Linux 操作基础&#xff0c;最好是程序员那种&#xff0c;英文水平足够用才行。一般人不需要使用这么复杂的路由器操作系统&#xff0c…

Linux自学day23-进程和线程

1. 什么是进程&#xff1f; 进程是程序执行的过程&#xff0c;涵盖创建、调度和消亡阶段&#xff0c;是活的。 而程序是一段数据的集合&#xff0c;是死的。 进程还是操作系统资源分配的最小单元&#xff0c;拥有独立的虚拟地址空间&#xff0c;包括文本段、数据段、系统数据…

python查错误TypeError: bad operand type for unary -: ‘str‘

TypeError: bad operand type for unary -: str​​​ 这个错误表明尝试对一个字符串类型的数据使用一元减号运算符&#xff08;​​-​​&#xff09;&#xff0c;而在 Python 中&#xff0c;一元减号运算符只能用于数值类型&#xff08;如整数、浮点数等&#xff09;&#xf…

常用的性能优化方法和技巧

常用的性能优化方法和技巧 前端性能优化 减少HTTP请求&#xff1a;就好比你去超市买东西&#xff0c;每次请求就像你跑一趟超市。去的次数越多&#xff0c;花在路上的时间就越多。所以把多个小的资源&#xff0c;像图片、脚本这些&#xff0c;合并成一个大的&#xff0c;就能…

网络协议相关知识有哪些?

前言 网络协议的基础是OSI和TCP/IP模型,这两个模型是理解协议分层的关键。 正文(仅是个人理解,如有遗漏望海涵) 网络协议是网络中设备间通信的规则和标准,涉及数据传输、路由、错误控制等多个方面。以下是网络协议相关知识的系统梳理: 一、网络协议分层模型 1、OSI七…

鸿蒙初学者学习手册(HarmonyOSNext_API14)_自定义动画API(@ohos.animator (动画) )

前言 在纯血鸿蒙中最具有用户特色的效果就是自定义的动画效果。在纯血鸿蒙中有多种定义方式&#xff0c;但是今天介绍的是ApI中的自定义动画。 注意: 动画本身具有生命周期&#xff0c;但是不支持在UIAbility的文件使用&#xff0c;简单而言就是不允许在UIAbility生命周期中…

搭建Kubernetes (K8s) 集群----Centos系统

前期准备 准备3台Linux虚拟机&#xff08;CentOS系统&#xff09;&#xff0c;参考 https://carry.blog.csdn.net/article/details/144578009https://carry.blog.csdn.net/article/details/144578009搭建Docker环境&#xff0c;参考 https://carry.blog.csdn.net/article/de…

wps中的js开发

严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…

第3章 3.2 配置系统 .NET Core配置系统

3.2.1 配置系统的基本使用 .NET Core中的配置系统支持非常丰富的配置源&#xff0c;包括文件&#xff08;JSON、XML、INI等&#xff09;、注册表、环境变量、命令行、Azure Key Vault等&#xff0c;配置系统还支持自定义配置源。 用配置系统开发包Microsoft.Extensions.Confi…

第六届计算机信息和大数据应用国际学术会议(CIBDA 2025)

重要信息 大会官网&#xff1a;www.ic-cibda.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月14-16日 大会地点&#xff1a;中国-武汉 简介 第六届计算机信息和大数据应用&#xff08;CIBDA 2025&#xff09;将于2025年3月14-16日在中国…

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama&#xff0c;ollama平台依赖于docker&#xff0c;Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用&#xff0c;导致docker无法启动&#xff0c;需要使用docker的替代品podman&#xff0c; 它完全兼容docker brew install p…

最优化方法-牛顿法

牛顿法 泰勒级数 泰勒级数展开 $$ \begin{aligned} f(x)&\lim\limits_{n\rightarrow \infin}\sum\limits_{i1}n\frac{1}{n!}f{(n)}(x_0)(x-x_0)^n\ &f(x_0)f’(x_0)(x-x_0)\frac{f’(x_0)}{2!}(x-x_0)2\cdots\frac{1}{n!}fn(x_0)(x-x_0)^n\ &\quad~ O\left[(x-x_…

【系统架构】分布式事务模型详解

1. 分布式基础理论 1.1 CAP理论 CAP 理论可以表述为&#xff0c;一个分布式系统最多只能同时满足一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition Tolerance&#xff09;这三项中的两项。 一致性是…

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件&#xff0c;以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性&#xff0c;如颜色、字体大小、样式和粗细。…

使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF

代码写了两个小时&#xff0c;速度太慢&#xff08;包括学习文档的时间&#xff09; #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …

设计模式教程:责任链模式(Chain of Responsibility Pattern)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种常用的设计模式&#xff0c;它属于行为型模式&#xff0c;主要解决的是多个对象处理一个请求时&#xff0c;如何解耦请求的发送者和接收者&#xff0c;以及如何将请求的处理职责分配给不同的对象。 1…

鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )

前言&#xff1a; 这个模块可以截取组件的图片&#xff0c;无论组件是否已加载。截图只能拍到组件本身的大小区域。 如果组件或其子组件画得超出了自己的区域&#xff0c;超出的部分不会出现在截图中。截图不会拍到与当前组件平级的&#xff08;兄弟&#xff09;组件。 模块简…