QGraphicsWidget收不到鼠标、键盘消息解决
问题的提出:
最近利用Graphics View Framework 实现一需求,其中要求鼠标按住QGraphicsWidget实现随意拖动,但调试发现鼠标、键盘的任何消息,QGraphicsWidget都无法响应,ItemIsMovable 、ItemIsSelectable 、ItemIsFocusable都已经通过如下代码设置:
setFlags(QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemSendsGeometryChanges | QGraphicsItem::ItemUsesExtendedStyleOption);
接受鼠标悬浮事件也设置为true:
setAcceptHoverEvents(true);
依然不响应鼠标键盘消息,即下面代码都不响应:
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event) override;virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override;virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;virtual void keyPressEvent(QKeyEvent *event) override;virtual void keyReleaseEvent(QKeyEvent *e) override;
经过艰苦排查,发现必须实现下面两个函数才能响应鼠标键盘消息:
QRectF CComponentLineWidget::boundingRect() const
{return QRectF(0, 0, 500, 500);
}QPainterPath CComponentLineWidget::shape() const
{QPainterPath path;path.addRect(boundingRect());return path;
}
其中CComponentLineWidget是QGraphicsWidget的派生子类。请注意:如果不实现shape函数,则shape函数默认返回的是QPainterPath为空的对象,只有鼠标落在一个由shape函数返回非空QPainterPath对象表示区域范围内时,才会接收鼠标、键盘消息。
总结:
要使QGraphicsItem、QGraphicsWidget响应鼠标、键盘消息,则必须满足:
- 必须实现boundingRect()函数,且该函数返回的矩形区域不能过小。
- 必须实现shape()函数,且该函数返回的QPainterPath对象不能为空,所表示的区域不能过小。
- 通过setFlags函数设置ItemIsMovable 、ItemIsSelectable 、ItemIsFocusable表示。
QGraphicsWidget收不到鼠标、键盘消息解决相关推荐
- linux安装界面键盘失灵,安装win7鼠标键盘失灵怎么办_win7安装界面鼠标键盘失灵解决方法【147下载站】...
相信许多用户在使用win7系统时都有遇到一些问题,有用户就有遇到安装win7鼠标键盘失灵的情况,那么遇到这个情况要怎么解决呢?鼠标键盘不能使用让我们操作起来很不方便,下面大家就一起来看看win7安装界 ...
- 联想G40-30进入PE鼠标键盘失灵解决方法
LZ是联想G40-30,以前同学帮装系统的时候,就遇到了U盘启动进入PE后鼠标键盘都失灵了,无法操作,一直也没有解决.最近自己装时也是同样问题.就在网上找了一下,自己也试过多次,没有问题.其大概步骤如 ...
- 银河麒麟桌面V10SP1版本系统休眠唤醒鼠标键盘失效解决方法
使用银河麒麟桌面系统有时会出现系统休眠后再唤醒,鼠标键盘失效的问题,可尝试以下方法解决. 1.检查是否安装 laptop-mode-tools 工具 执行命令: dpkg -l | grep lapt ...
- 全局钩子(hook鼠标键盘消息)
生成DLL文件,模块定义文件为: LIBRARY Hook EXPORTS SetHook @2 实现文件如下.其中g_hWnd为所有进程共享,并且绕过了系统对可写数据的写时复制机制,维护的是一份拷贝 ...
- 【原创】CLEVO P157SM外接鼠标键盘失灵解决:更换硅脂(附带最新跑分数据)
作者批注:本文允许转载,并且希望给搜索未来人类.蓝天.CLEVO.更换硅脂或者任何有关关键字的朋友提供帮助. 原文地址:http://www.cnblogs.com/c4isr/p/3514140.h ...
- C#使用LibVLC实现播放遇到无法全屏及鼠标键盘事件问题解决
最近开发视频播放软件使用VLC实现流媒体播放,在使用libVLC自己进行集成播放控件时发现,播放窗口picturebox不响应鼠标键盘事件,无法进行双击或鼠标全屏播放功能的实现.原因是事件被vlc s ...
- Delphi下利用SendInput模拟鼠标键盘
前言 发了一篇<Delphi下利用WinIo模拟鼠标键盘详解>(http://programbbs.com/bbs/view12-17207-1.htm),再发一个利用SendInput模 ...
- java 模拟键盘输入_Java 在windows 下模拟鼠标键盘的输入
Java提供了一个很好的自动化测试类供我们去模拟鼠标键盘消息.以下是Robot的主要方法 Robot类的主要方法详细信息 1.mouseMove(int x,int y)将鼠标指针移动到给定屏幕坐标: ...
- Android系统模拟鼠标键盘详解
转自:http://blog.sina.com.cn/s/blog_602f87700102uz8j.html 在Android系统下模拟鼠标键盘等输入设备,网络上资料非常多.但不少是人云亦云,甚至测 ...
最新文章
- poj2240(Bellman-ford)
- 你住的城市7.5亿年前长啥样?这张互动地图能让你看到
- 带你简单了解通信工程
- awk用法小结(作者总结)
- mybatis枚举自动转换(通用转换处理器实现)
- debian9为什么默认是pip2_Debian9 安装后基本配置
- web里如何在背景图片上放置div元素_2020年web前端开发经典面试题总结整理(建议收藏)...
- posix线程使用详解
- 考试用计算机反思800字,期中考试反思800字(5篇)
- Windows Xp Sp3官方简体中文版(原版) 纯净安装版 百度网盘下载
- 系统重温Pandas笔记:(八)文本数据
- JAVA中Object类中的equal方法
- 希尔伯特的23个问题
- 如何修改PPT文档的编辑版式
- 《python数据分析与挖掘实战》笔记第3章
- 关于产品的一些思考——腾讯之手机安全管家
- list redis 怎样做排行_Redis中5种数据结构的使用场景介绍
- cocos2d-LUA逆向之用idaPro调试so库获取xxtea解密key
- webrtc的DEMO环境搭建
- errdisabled 障碍处理
热门文章
- cc2530dma控制器功能_CC2530常用的控制寄存器
- android 断开蓝牙连接,如何在android中连接和断开扬声器蓝牙
- mysql group by 规则_MySQL 中关于 GROUP BY 的问题
- java orm框架什么意思_ORM框架是什么
- php sodium 加密解密,sodium库(加密)
- win7可以安装sqlserver2008 企业版吗_MYSQLServer2008R2详细的图文安装教程
- 安卓平板排行榜_shopee虾皮台湾安卓市场, shopee虾皮直播下载
- mysqldump全量恢复_删库不跑路-详解MySQL数据恢复
- 洛谷 P3119 [USACO15JAN]草鉴定Grass Cownoisseur (SCC缩点,SPFA最长路,枚举反边)
- DateUtils常用方法