自定义右键菜单栏

news2025/4/10 8:02:42

自定义菜单栏,关键要用到一个类为QWidgetAction,它继承于QAction,

1.使用setDefaultWidget接口将 自定义窗口放到QWidgetAction中,

2.然后再像添加QAction一样,将QWidgetAction添加到QMenu中就可以了。
 

比如,在一个tab标签页上实现一个“右键菜单栏”,实现一些动作:标签页的“上移”/“下移“/”删除”等。

        

QMenu* m_menu = new QMenu(this);
//菜单样式
QString menuStyle(
	"QMenu::item{"
	"color: rgb(10, 10, 10);"
	"}"
	"QMenu::item:hover{"
	"background-color: rgb(170, 160, 235);"
	"}"
	"QMenu::item:selected{"
	"background-color: rgb(176, 190, 225);"
	"}"
);
QString buttonStyle(
	"QPushButton{"
	"color: rgb(0, 0, 0);"
	"border: none;"
	"text-align: left;"
	"font: 9pt Microsoft YaHei;"
	"padding-left: 5px;"
	"padding-right: 5px;"
	"min-height: 23px;"
	"}"
	"QPushButton::hover{"
	"background-color: rgba(176, 190, 225, 200);"
	"}"
	"QPushButton::selected{"
	"background-color: rgba(176, 190, 255, 255);"
	"}"
);
m_menu->setStyleSheet(menuStyle);//设置菜单样式

QPushButton* moveUpAction_buf = new QPushButton(m_menu);
moveUpAction_buf->setStyleSheet(buttonStyle);
moveUpAction_buf->setText("上移");
moveUpAction_buf->setIconSize(QSize(20, 20));
moveUpAction_buf->setIcon(QIcon(":/res/ico/previous.png"));
QWidgetAction* moveUpAction = new QWidgetAction(this);
//1.将自定义的窗口(这里是一个QPushButton),放到QWidgetAction中
moveUpAction->setDefaultWidget(moveUpAction_buf);
connect(moveUpAction_buf, &QPushButton::clicked, this, &frmInstrumentation::slot_MoveUp);
connect(moveUpAction_buf, &QPushButton::clicked, m_menu, &QMenu::close);
//2.将QWidgetAction添加到QMenu中。“动作”添加到菜单
m_menu->addAction(moveUpAction);

QPushButton* moveDownAction_buf = new QPushButton(m_menu);
moveDownAction_buf->setStyleSheet(buttonStyle);
moveDownAction_buf->setText("下移");
moveDownAction_buf->setIconSize(QSize(20, 20));
moveDownAction_buf->setIcon(QIcon(":/res/ico/next.png"));
QWidgetAction* moveDownAction = new QWidgetAction(this);
//1.将自定义的窗口(这里是一个QPushButton),放到QWidgetAction中
moveDownAction->setDefaultWidget(moveDownAction_buf);
connect(moveDownAction_buf, &QPushButton::clicked, this, &frmInstrumentation::slot_MoveDown);
connect(moveDownAction_buf, &QPushButton::clicked, m_menu, &QMenu::close);
//2.将QWidgetAction添加到QMenu中。“动作”添加到菜单
m_menu->addAction(moveDownAction);

QPushButton* deleteNameAction_buf = new QPushButton(m_menu);
deleteNameAction_buf->setStyleSheet(buttonStyle);
deleteNameAction_buf->setText("删除");
deleteNameAction_buf->setIconSize(QSize(21, 21));
deleteNameAction_buf->setIcon(QIcon(":/res/ico/del.png"));
QWidgetAction* deleteNameAction = new QWidgetAction(this);
deleteNameAction->setDefaultWidget(deleteNameAction_buf);
connect(deleteNameAction_buf, &QPushButton::clicked, this, &frmInstrumentation::slot_DeleteName);
connect(deleteNameAction_buf, &QPushButton::clicked, m_menu, &QMenu::close);
m_menu->addAction(deleteNameAction);

//给控件设置上下文菜单策略
ui.tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
//给信号设置相应的槽函数
connect(ui.tableWidget, &QTableWidget::customContextMenuRequested, [=](const QPoint& pos)
	{
		//参数pos用来传递右键点击时的鼠标的坐标,这个坐标一般是相对于控件左上角
		m_menu->exec(QCursor::pos());
	});

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

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

相关文章

2023年亚太杯APMCM数学建模大赛A题水果采摘机器人的图像识别

2023年亚太杯APMCM数学建模大赛 A题 水果采摘机器人的图像识别 原题再现 中国是世界上最大的苹果生产国,年产量约3500万吨。同时,中国也是世界上最大的苹果出口国,世界上每两个苹果中就有一个是中国出口的,世界上超过六分之一的…

【高效开发工具系列】PlantUML入门使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

[个人笔记] Zabbix实现Webhook推送markdown文本

系统工程 - 运维篇 第四章 Zabbix实现Webhook推送markdown文本 系统工程 - 运维篇系列文章回顾Zabbix实现Webhook推送markdown文本前言实施步骤 Zabbix新增报警媒介类型Zabbix给用户新增报警媒介Zabbix修改动作的执行操作和恢复操作验证&测试 参考来源 系列文章回顾 第一章…

nuxt、vue实现PDF和视频文件的上传、下载、预览

上传 上传页面 <el-form-item :label"(form.ququ3 1 ? 参培 : form.ququ3 2 ? 授课 : ) 证明材料" prop"ququ6"><PdfUpload v-model"form.ququ6" :fileType"[pdf, mp4, avi, ts]"></PdfUpload> </el-form-i…

虚幻学习笔记—文本内容处理

一、前言 本文使用的虚幻引擎5.3.2&#xff0c;在虚幻中已经集成了很多可以直接处理多样化文本的蓝图&#xff0c;比如格式化动态显示、浮点数多样化等。 二、实现 2.1、格式化文本显示动态内容&#xff1a;在设置某个文本时可以使用“Format Text”蓝图设置自定义可以的显示…

广州华锐互动:VR虚拟现实内容创作工具带来全新的应用场景

随着科技的不断发展&#xff0c;低代码编辑工具已经成为了一种越来越受欢迎的开发方式。它可以帮助开发人员快速构建应用程序&#xff0c;降低开发成本&#xff0c;提高开发效率&#xff0c;而VR虚拟现实内容创作工具带来了全新的应用场景。 VR虚拟现实内容创作工具是广州华锐互…

Python办公神器:教你如何快速分拆、删页、合并PDF文件

哈喽大家好&#xff0c;我是了不起&#xff0c;今天教你如何用Python快速分拆、删页、合并PDF文件 介绍 有时我们可能需要对PDF文件进行一些处理&#xff0c;例如分拆、删页、合并等。这些操作在一些专业的PDF软件中可能比较容易实现&#xff0c;但是如果我们想要用Python来自…

C++STL——string类详解及其模拟实现

CSTL——string类 1. STL简介 STL全称standard template libaray&#xff0c;译为标准模板库 需要注意&#xff0c;STL不是C的标准库&#xff0c;而是C标准库的重要组成部分STL是一个包含众多数据结构和算法的软件框架 下面展示STL的六大组件&#xff1a; 本章&#xff0c;我…

强化学习中的深度Q网络

深度 Q 网络&#xff08;Deep Q-Network&#xff0c;DQN&#xff09;是一种结合了深度学习和强化学习的方法&#xff0c;用于解决离散状态和离散动作空间的强化学习问题。DQN 的核心思想是使用深度神经网络来近似 Q 函数&#xff0c;从而学习复杂环境中的最优策略。 以下是 DQN…

二叉树进阶OJ题

目录 一、前序遍历非递归 二、中序遍历非递归 三、后序遍历非递归 四、二叉树转链表 五、二叉树的最近公共祖先 六、二叉树的层序遍历1 七、二叉树的层序遍历2 一、前序遍历非递归 题目描述&#xff1a;写出二叉树前序遍历的非递归形式。 链接&#xff1a;前序遍历 思…

css之svg 制作圆及旋转

1.代码 <template><div class"loading-box"><div class"circle-container"><svg width"75" height"75" class"move-left-to-right"><circle cx"37.5" cy"37.5" r"26&…

leetcode42接雨水问题

接雨水 题目描述 题目分析 核心思想&#xff1a; 代码 java版本&#xff1a; package com.pxx.leetcode.trapRainWaterDoublePoniter;public class Solution1 {public int trap(int[] height) {if (height.length 0) {return 0;}int n height.length;int left 0;int righ…

Linux之高级IO

目录 IO基本概念五种IO模型钓鱼人例子五种IO模型高级IO重要概念同步通信 VS 异步通信阻塞 VS 非阻塞其他高级IO阻塞IO非阻塞IO IO基本概念 I/O&#xff08;input/output&#xff09;也就是输入和输出&#xff0c;在著名的冯诺依曼体系结构当中&#xff0c;将数据从输入设备拷贝…

2023亚马逊云科技re:Invent,与全球合作伙伴探索更多发展可能

一年一度的全球云计算、科技圈的狂欢“Party”又双叒叕要来了&#xff01;2023年11月27日&#xff0c;2023亚马逊云科技re:Invent正式向全球云计算从业者、合作伙伴发出邀请&#xff0c;相聚拉斯维加斯&#xff0c;共同开启一场创新探索之旅&#xff01; 全球合作伙伴相约拉斯维…

ffmpeg开发 环境配置

ffmpeg开发简图 1 下载ffmpeg开发包 https://ffmpeg.org/download.html 包含三个版本&#xff1a;Static、Shared以及Dev Static --- 包含3个应用程序&#xff1a;ffmpeg.exe , ffplay.exe , ffprobe.exe&#xff0c;体积都很大&#xff0c;相关的DLL已经被编译到exe里面去…

【Java】ThreadPoolExecutor类参数简述

ThreadPoolExecutor类继承自AbstractExecutorService类&#xff0c;而AbstractExecutorService实现了ExecutorService接口 ThreadPoolExecutor类是Executor类中重要的实现类 1、ThreadPoolExecutor构造方法参数 在手册中&#xff0c; 一共有四种参数列表不同的构造方法。我们…

【文末送书】程序员如何化解35岁危机?

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

网易云音频数据如何爬取?

在当今数字化时代&#xff0c;音频数据的获取和处理变得越来越重要。本文将详细介绍如何使用Objective-C语言构建音频爬虫程序&#xff0c;以爬取网易云音乐为案例。我们将从Objective-C的基础知识开始&#xff0c;逐步深入到爬取思路分析、构建爬虫框架、完整爬取代码等方面&a…

android trace文件的抓取与查看方法

本地手机抓取trace 解压android trace文件的抓取与查看方法 找到config.pbtx文件&#xff0c;连接手机push进去 # push config.pbtx &#xff0c;/data/local/tmp/为自定义push到的目录 adb push config.pbtx /data/local/tmp/ adb shell # 抓取trace&#xff0c; /data/loc…

Redis原理之五种数据类型笔记

目录 String List Set ZSet ​ Hash String List Set ZSet Hash