Qt实现“点击菜单项后QMenu不关闭”功能

Qt之菜单栏、工具栏、状态栏介绍及工具栏QAction的动态增删显示实现方式 阅读详情
AI摘要

本文介绍如何在Qt中自定义QMenu行为,实现在修改QAction状态时菜单不自动关闭,直至用户在菜单外点击。通过重载mouseReleaseEvent方法,判断鼠标位置,智能控制菜单显示与隐藏。

题目里的意思说起来有点儿绕嘴。其实是这么个事:在QMenu里添加了很多QAction项,每项都使能了check,就是前面可以加上小勾勾那种。假如要勾上QAction1的小勾勾、勾掉QAction2的小勾勾,按照Qt默认的操作,要先点开QMenu的下拉菜单,点QAction1,这时下拉菜单消失了,需要再点开下来菜单去点QAction2。这就比较麻烦了对不对?这还只是两个QAction,要是搞十几个QAction,就问你烦不烦?我想实现个什么功能呢,就是点开下拉菜单,在我修改小勾勾时候菜单不消失,改完了在下拉菜单之外点一下,这时菜单才消失不见。肿木搞呢?下面来说说方法。

首先从QMenu派生个自己的类,姑且叫MyMenu吧,定义如下图:

这里最关键的是重载mouseReleaseEvent,因为QMenu的下拉菜单是在这个方法里关闭的。下面来看实现:

action是当前鼠标所在的菜单项对应的QAction,如果鼠标点在QAction上了,我们期望的动作是触发这个QAction,但不让下拉菜单消失,对不对?那么在action不为空的情况下,我们执行action->activate,这样只是点击了QAction而已;而如果action为空,那就说明鼠标在菜单之外,这时就要执行关闭下拉菜单的操作了,于是我们调用基类的方法QMenu::mouseReleaseEvent。我们知道在基类中的处理是关闭下拉菜单,这样就实现了期望的功能。

Qt 之 QToolButton属性简述 QtDesigner中Qt助手中以上是QToolButton主要的四个属性,下面分别简述这四个属性的作用。一、arrowType属性在Qt助手中可以看到arrowType属性有5个值,下面分别用图来解释着5个值的区别。 首先arrowType的默认值为NoArrow,也就是你直接在QtDesigner中拖出来的原始状态。 (1)UpArrow (2)DownArrow (3)LeftArro 阅读详情

相关推荐

QMenu----QT鼠标右键弹出菜单

在用QT编程时,有时候要实现鼠标右键弹出菜单的功能.下面代码演示鼠标右键弹出菜单. 1.新建一个QT工程,点击MainWindow.ui,鼠标右键Go to slot.....,添加customContextMenuRequested(const QPoint &pos)事件 2.找到属性页中的contextMenuPolicy,把DefaultContextMenu改成CustomC...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 1万+

Qmenu不会因鼠标点击直接关闭

Qmenu不会因鼠标点击直接关闭

BraveNewWorld10的博客 864

QT 控制菜单栏切换菜单项,解决高亮消失,阻止QMenu 的自动关闭机制

QT 控制菜单栏切换菜单项,模拟键盘操作,主要解决了高亮消失问题,因为它直接阻止了 QMenu 的自动关闭机制。当你从子菜单切换到普通菜单项时,QMenu 原本会启动一个定时器来准备关闭菜单(因为用户通常在选择菜单项后希望菜单关闭)。通过拦截 Timer 事件,你中断了这个关闭过程,使菜单保持打开状态并维持高亮显示。

QMenu派生类:实现“点击菜单项后QMenu不关闭”功能

.

陌上人如玉,公子世无双。 719

FoundationPose实战:从零部署到Demo运行全记录

本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。

weixin_27102543的博客 269

头歌MySQL数据库实训答案 有目录

头歌java实训答案集数据库部分一条一条的写,可鼠标手动粘贴,除特定命令外未分大小写。 第1关:创建数据库 第2关创建表 第3关:使用主键约束 第4关:外键约束 第5关:添加常用约束 MySQL数据库 - 数据库和表的基本操作(一) 第1关:查看表结构与修改表名 第2关:修改字段名与字段数据类型 第3关:添加与删除字段 第4关:修改字段的排列位置 第5关:删除表的外键约束 MySQL数据库 - 数据库和表的基本操作(二) 第1关:插入数据 第2关:更新数据 第3关:删除数据 MySQL数据库 - 单表查询(

m0_67401761的博客 4万+

如何让菜单点击后不消失

本篇文章摘自 优快云论坛区 allencui0313的帖子,为了以后用到时好找就收藏到自己的空间里。 其实action的触发是由menu来控制的。当QMenu收到QMouseReleased事件后,会根据坐标找到当前的QAction并激发。然后自己隐藏。 因此重载菜单,重写mouseReleaseEvent,本篇文章是设置action的属性,根据设置的属性来控制行为。 #inclu

guomingbing12的专栏 2919

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3850

qmenu qt 关闭,Qt实现点击菜单项后QMenu不关闭功能

Qt实现点击菜单项后QMenu不关闭功能Qt实现“点击菜单项后QMenu不关闭”功能题目里的意思说起来有点儿绕嘴。其实是这么个事:在QMenu里添加了很多QAction项,每项都使能了check,就是前面可以加上小勾勾那种。假如要勾上QAction1的小勾勾、勾掉QAction2的小勾勾,按照Qt默认的操作,要先点开QMenu的下拉菜单,点QAction1,这时下拉菜单消失了,需要再点开下来菜单去...

weixin_42354108的博客 1079

华为OD面试八股真题 - 操作系统 - 1

华为OD技术面,操作系统相关八股真题提供详细解答,这篇博客主要涉及于进程和线程相关知识点

qq_45776114的博客 1641

图片风格自动分析模型

对于分类任务,我们可以使用交叉熵损失作为损失函数。同时,我们可以选择随机梯度下降(SGD)或Adam等优化器进行模型优化。# 使用SGD优化器# 或使用Adam优化器在这部分,总结整个项目的过程,包括数据准备、模型构建、训练、优化和评估等。同时,讨论可能的改进方向和未来工作,例如尝试更多的模型结构、优化技巧等。

a871923942的博客 1699

qmenu点击后不关闭_Qt中QMenu的菜单关闭处理方法

Qt中qmenu的实现三四千行...当初有个特殊的需求, 要求菜单的周边带几个像素的阴影, 琢磨了半天, 用QMenu做不来, 就干脆自己用窗口写一个然而怎么让菜单消失却非常麻烦1. 点击菜单项2. 点击其他地方3. 被其他窗口遮挡4. 按键啊然后用判断焦点的方法吭哧吭哧写了, 做法类似弹出一个自动关闭的窗口.但是菜单是可以多级的, 这就造成非常恶心的焦点传递. 虽然最终处理好了(代码好恶心- -...

weixin_28802509的博客 2321

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

qmenu qt 关闭_Qt中QMenu的菜单关闭处理方法

以下内容引用自http://www.cnblogs.com/lingdhox/p/3474404.htmlQt中qmenu的实现三四千行...当初有个特殊的需求, 要求菜单的周边带几个像素的阴影, 琢磨了半天, 用QMenu做不来, 就干脆自己用窗口写一个然而怎么让菜单消失却非常麻烦1. 点击菜单项2. 点击其他地方3. 被其他窗口遮挡4. 按键啊然后用判断焦点的方法吭哧吭哧写了, 做法类似弹出一...

weixin_35259353的博客 735

华为OD机试 - 进制转换 - 二进制(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 917

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 275

Qt中QMenu的菜单关闭处理方法

Qt中qmenu的实现三四千行... 当初有个特殊的需求, 要求菜单的周边带几个像素的阴影, 琢磨了半天, 用QMenu做不来, 就干脆自己用窗口写一个 然而怎么让菜单消失却非常麻烦 1. 点击菜单项 2. 点击其他地方 3. 被其他窗口遮挡 4. 按键啊 然后用判断焦点的方法吭哧吭哧写了, 做法类似弹出一个自动关闭的窗口. 但是菜单是可以多级的, 这就造成非常恶心的焦点传递. ...

weixin_30289831的博客 903

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

sectionPressed 与 sectionClicked 的时序差异:QHeaderView 表头点击切换 QMenu 弹窗的正确信号选择(QKeyMapper 实战解析)

在 Qt 应用中,点击 `QHeaderView` 表头来"开关"一个 `QMenu` 弹出菜单(可见则关闭、隐藏则打开)是一种常见交互。然而很多开发者会踩进同一个坑:使用 `QHeaderView::sectionClicked` 实现切换时,菜单永远只会被"打开",却无法被"关闭"——看起来像是 toggle 逻辑失效。本文以 QKeyMapper 项目中的真实代码为例,剖析这一现象背后的 Q

gitblog_00098的博客 874

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

qmenu qt 关闭_Qt之QMenu设置快解键&添加动作

1、新建QTGUI应用,基类选择QWidget,取消创建界面2、 添加菜单 #include #include #include #include Widget::Widget(QWidget *parent): QWidget(parent){QMenuBar *menuBar = new QMenuBar(this);QMenu *menu[3];menu[0] = new QMenu("Fi...

weixin_42467428的博客 520

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Qt QMenu简介

1.常用方法 //添加带图标,文字的菜单项 QAction *addAction(const QIcon &icon, const QString &text) //添加带快捷键,带菜单项接收槽 QAction *addAction(const QString &text, const QObject *receiver, const char *member, const QKeySequence &shortcut = 0) //添加分隔符 QAction *ad

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 3192

Qt右击菜单项

有两种方法: 自定义槽函数接受信号 使用鼠标事件监听 目录一、前言二、自定义槽函数接受信号三、使用鼠标监听四、两分法对比 一、前言 这里我用的是QTextEdit来实现右键功能,假设我们的预期功能是:复制、粘贴 、保存、关闭四个功能。 但是,我们在直接运行Qt后,发现右键已经有默认功能了,如图: 如果有ui项目的话,进入ui的QTextEdit组件,找到contextMenuPolicy发现已经设置为DefaultContextMenu。到此应该知道,Qt默认为我们创好了默认菜单。 查看Qt文档可以证

yc__coder的博客 1244

QT使用右键菜单QMenu

看下面动画 关键代码: #pragma once #include <QtWidgets/QMainWindow> #include<QAction> #include<QMenu> #include <qmessagebox.h> #include <qobject.h> #include "ui_MyQmenu.h" class MyQmenu : public QMainWindow { Q_OBJECT public:

我不是码农的博客~~~ 1049

QMenu类

> 提供了一个菜单部件,用于菜单栏、上下文菜单和其他弹出菜单。

floatBit的专栏 703

Qt项目天气预报(2) - 重写事件函数

QMenu是Qt库中用于创建弹出式菜单的类,它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。//2.鼠标左键释放的时候获得鼠标当前值,对应的窗口位置也根据相对距离进行偏移。// 将窗口根据鼠标当前位置和偏移值进行移动(这个值是固定的,作为窗口移动的桥梁)//1.当鼠标左键被按下的时候记录鼠标/窗口当前值,还有鼠标与窗口的相对值。event->globalPos()-this->pos() - 作差求相对坐标。event->pos() -- 鼠标相对窗口的坐标 或者。

mx_jun的博客 1128

QT之状态栏操作dockwidget开启、关闭

方式有很多,本文用的方式是点击在状态栏statusBar()中的QToolButton对dockwidget操作。点击下拉框即可实现对dockwidget的操作。dockwidget关闭后该如何重新打开?4 关联QToolButton和QMenu。5 将QToolButton嵌入状态栏。2 新建dockWindowTool。1 新建dockwidget。

qq_39542885的博客 2541
上一篇: win10+vs2015/2017 x64+python2.7+cuda10.x一键编译caffe
下一篇: Visual Studio开发Qt程序自动拷贝依赖库
此何人哉
博客等级 码龄20年 30粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值