Qt QTtoolButton 鼠标移动到按钮上时,弹出菜单后,按钮的hover状态无法恢复的问题
需求:QTtoolButton 鼠标移到按钮上时,弹窗菜单,并且点击菜单或者其他地方,菜单关闭后,按钮的hover状态需要恢复原状。
1. 创建按钮和菜单,并安装事件过滤器
m_Menu = new QMenu();
m_Menu->addAction(ui->action22);
m_Menu->installEventFilter(this); m_ToolButton =new QToolButton(this);
m_ToolButton->setPopupMode(QToolButton::InstantPopup);
m_ToolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
m_ToolButton->setDefaultAction(ui->action1);
m_ToolButton->setMenu(m_Menu);
m_ToolButton->installEventFilter(this); //安装事件过滤器
2.在事件过滤器中,处理消息,关键点是设置WA_UnderMouse为false。
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == m_ToolButton)
{
//如果鼠标进入,弹出菜单
if (event->type() == QEvent::HoverEnter)
{
m_ToolButton->showMenu(); //弹出菜单
}
}
else if(obj == m_Menu)
{
//菜单隐藏后
if (event->type() == QEvent::Hide)
{
//关键点,需要设置WA_UnderMouse为false,让按钮认为不在鼠标下,然后再发送QEvent::HoverLeave消息,才会起到恢复hover状态的作用。
m_ToolButton->setAttribute(Qt::WA_UnderMouse, false);
QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(10, 10), QPoint(0, 0));
QCoreApplication::sendEvent(m_ToolButton, &hoverEvent);
}
}
return QWidget::eventFilter(obj, event);
}
Qt QTtoolButton 鼠标移动到按钮上时,弹出菜单后,按钮的hover状态无法恢复的问题的更多相关文章
- Qt编程之对QGraphicsItem点击右键弹出菜单
就是对这个contextMenuEvent 事件重新实现,在这个事件函数中创建菜单,大概就是这样. void MyItem::contextMenuEvent(QGraphicsSceneContex ...
- JS事件 鼠标经过事件(onmouseover)鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序。
鼠标经过事件(onmouseover) 鼠标经过事件,当鼠标移到一个对象上时,该对象就触发onmouseover事件,并执行onmouseover事件调用的程序. 现实鼠标经过"确定&quo ...
- Jquery hover鼠标经过时弹出div动态提示语
一.效果图 二.需求描述 1.鼠标经过table每一行时,弹出div动态提示语: 2.div弹出层的位置随鼠标位置的变化而变化: 3.鼠标离开table或获取的动态提示语为空时,div弹出层消失. 下 ...
- Extjs4.2如何实现鼠标点击统计图时弹出窗口来展示统计的具体列表信息
var pageSize = 20;//初始化每页数据条数 var winTitle = '';//初始化窗口标题 /** *点击统计图时,弹出一个窗口,显示统计的详情列表信息, *该方法为项目中所有 ...
- Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- 基于jQuery悬停弹出遮罩显示按钮代码
今天给大家分享一款基于jQuery悬停弹出遮罩显示按钮代码.这是是一款当鼠标悬停在图片上后,会出现一系列的按钮,文字等弹性动画效果.效果图如下: 在线预览 源码下载 实现的代码. html代码: ...
- 如何不使用js实现鼠标hover弹出菜单效果
最近看到很多同学在实现鼠标hover弹出菜单的效果时都是用的js代码去实现的,默认给弹出隐藏掉,通过js事件绑定动态的显/隐弹出菜单元素. <ul> <li>主页</li ...
- [UWP]在应用退出时弹出确认提示框
1. 需求 在应用退出时(点击右上角的关闭按钮)弹出一个确认按钮可以说是一个最常见的操作了,例如记事本的"你是否保存": 但这个功能在UWP上居然有点小复杂.这篇文章将解释如何实现 ...
- Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法
Visual Studio2012打开时弹出"遇到异常:这可能是由某个扩展导致的"错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后 ...
- Android listview 制作表格样式+由下往上动画弹出效果实现
效果是这样的:点击按下弹出表格的按钮,会由下往上弹出右边的列表,按下返回按钮就由上往下退出界面. 布局文件: activity_main.xml <RelativeLayout xmlns:an ...
随机推荐
- tailwindcss 经验
树摇时扫描的文件范围 根据 tailwindcss.config.js 中 content 的配置,跟打包软件加载的模块无关.即未使用的模块中的 class 也会被包含进来.
- JavaScript习题之填空题
1. JavaScript有两种引⽤数据类型:__数组___.__对象__.2. Javascript通过__setTimeout___延迟指定时间后,去执⾏某程序.3. Javascript⾥Str ...
- 加入 Flutter Engage,Pick 您的专属 Dash 形象!
Flutter Engage 活动精彩来袭 对 Flutter 团队的开发者们来说,交流的重要性不言而喻,和您一样,我们也希望开发者们能够在不同的情境下进行互动分享.于是我们为您准备了一场特别的线上活 ...
- Hive--hbase--spark
hive创建hbase表 create external table events.hb_train( row_key string, user_id string, event_id string, ...
- CNN归纳偏好
出处:Transformer为何能闯入CV界秒杀CNN? CNN 中的卷积运算由于使用了两个重要的空间约束,从而有助于视觉特征的学习和提取: 由于 CNN 权重共享机制,卷积层所提取的特征便具有平移不 ...
- DBA面试资源合集(含Oracle、MySQL、Redis等)-墨天轮
如今正值金九银十招聘季,众多企业开放大批岗位等待新力量的注入,各位DBA们,你们是否正在激情备战中? 作为企业数据化进程中十分重要的一环,DBA的职责越来越重要,作为高薪资岗位之一,应聘DBA的竞争也 ...
- Ewald求和在分子静电势能计算中的应用
技术背景 分子动力学模拟中,计算周期性边界条件的静电势常被视作计算的瓶颈之一.形式上是比较容易的,例如不考虑周期性边界条件的话,静电势能就是: \[E=\frac{1}{4\pi\epsilon_0} ...
- C# 的浮点类型 float double 和十进制类型 decimal
// 浮点型数据 float double(双精度) // float f = 1.1; // ps:写小数的时候只要后面没有加上 f/F 默认是double类型 // 正确的定义 double d ...
- 常用的linux命令 docker常用命令
mkdir 新建目录 rmdir 删除目录 rm只能删除文件,不能删除目录 cp test.txt Documents 进入容器的目录 docker exec -it <container_id ...
- nginx配置tomcat的反向代理记录
tomcat环境安装 (1)在 liunx 系统安装 tomcat,使用默认端口 8080 * tomcat 安装文件放到 liunx 系统中,解压, tar -xzvf tomcat.xxx * 进 ...