一个编辑区域,用QGraphi参数View写的,可以放大,鼠标按下后可以拖拽查看,这个时候希望鼠标可以是"小手"抓取的样子.QGraphicsView上有一些个QGraphicsItem,希望鼠标悬停在item上时可以变成四向箭头,然后可以拉伸item.

所以重新了QGraphicsView的

void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);

三个方法,并在其中写了判断,

if (m_bDrag)
{
this->setCursor(Qt::OpenHandCursor);
}

QGraphicsItem重写了

void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
void hoverMoveEvent(QGraphicsSceneHoverEvent *event);

方法,并且也在其中添加了判断,

if (m_bHover)
{
this->setCursor(Qt::SizeAllCursor);
}

但是在运行的时候并没有按照预想的执行,当QGraphicsView中未添加Item的时候,可以显示"小手"的拖拽光标,也可以进行图标切换,但是当添加过item后,

虽然也执行了view中改变鼠标样式的函数,但是并没有效果,当鼠标悬停在Item上方的时候,鼠标样式发生改变.

分析了一下,this->setCursor(Qt::OpenHandCursor);和this->setCursor(Qt::SizeAllCursor);的this并不是一个对象,this是View对象,而this是item对象,

所以在Item的悬停方法中,我改成这样

void MytItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
{
if (m_bHover)
{

// 获取当前item所属于的scene,然后获取scene的Views,因为我只有一个View,所以用下标at(0)获取了view

QGraphicsView * view = this->scene()->views().at(0);

// 然后用view设置鼠标样式
view->setCursor(Qt::SizeAllCursor);
}
QGraphicsItem::hoverMoveEvent(event);
}

问题解决,在查找的时候,发现有一篇博客这样写,但是还未验证

解决方法就是在QGraphicsView子类中使用viewport()->setCursor()而不是直接的setCursor(),这样才能真正改变视觉上的鼠标形状。viewport()函数定义在QAbstractScrollArea类中,QGraphicsView继承自QAbstractScrollArea类,对于更新更新视图内容应该用viewport()->update(),而不是直接用update()。

http://blog.csdn.net/afterward___/article/details/46408355

QGraphicsView 更改鼠标样式 以及QGraphicsItem悬停时更改鼠标样式相关推荐

  1. html鼠标悬停填充表格,鼠标移到表格上时,鼠标所在行放大高亮显示【实例】...

    本文给大家介绍一个比较有趣的CSS Table表格,当鼠标移到表格上时,鼠标所在行放大高亮显示. 鼠标所在行放大高亮显示 HTML代码html> Table V01 * { margin: 0p ...

  2. ajax使鼠标触摸时图片放大,当鼠标移动到图片上时跟随鼠标显示放大的图片效果...

    原始状态: 鼠标经过: 无标题文档 $(function(){ var offsetX=20-$("#imgtest").offset().left; var offsetY=20 ...

  3. dev项目属性按钮是灰色_如何当按钮处于各种交互状态时具有不同样式的按钮?...

    Axure RP 9 for Mac是一款交互式原型设计神器,使用axure rp9以最佳的方式展示您的作品,优化现代浏览器并为现代工作流程设计.同时确保您的解决方案正确完整地构建.在本篇文章中,我们 ...

  4. vue中解决 mouseenter 和 mouseout 时,鼠标进入子组件造成 mouseout 触发而闪烁的问题

    解决 mouseenter 和 mouseout 时,鼠标进入子组件造成 mouseout 触发而闪烁的问题 1.需求背景 2.核心解决方法 3.两对鼠标事件的区别 (1)mouseover 和 mo ...

  5. linux cs go鼠标灵敏度,CSGO鼠标调试方法 选择适合自己的鼠标速度

    基本概念:无加速度与精确一比一 地球人都知道控制面板中的"Enhance pointer precision"(提高指针精准度,下文简称EPP)是开启鼠标加速的选项.由于在电竞.作 ...

  6. 在div 鼠标悬停时改变滚定条样式

    通过改变滚动条颜色来实现div 鼠标悬停时 显示滚动条小方块 .panel-cont::-webkit-scrollbar {/*滚动条整体样式*/width: 6px; /*高宽分别对应横竖滚动条的 ...

  7. html5鼠标悬停图片放大的原理,jQuery当鼠标悬停时放大图片的效果实例

    这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后加以改善,终于实现了比较理想的效果.今天就把制作该效果的经验与大家一同分享.先看看最终效果演示: HT ...

  8. CSS文字超出部分用省略号代替,js鼠标悬停时显示全部文本

    需求: 宽度为百分比,随浏览器变化而变化,当窗口变小到一定程度,文字超出部分用省略号代替,当文字出现省略号,需要鼠标悬停时显示全部文本. 文字超出部分用省略号代替 width:overflow: hi ...

  9. 基于jQuery的鼠标悬停时放大图片的效果制作

    这是一个基于jQuery的效果,当鼠标在小图片上悬停时,会弹出一个大图,该大图会跟随鼠标的移动而移动.这个效果最初源于小敏同志的一个想法,刚开始做的时候只能实现弹出的图片是固定的,不能随鼠标移动,最后 ...

最新文章

  1. linux 相对路径
  2. -Wl,-rpath=
  3. 卷积网络的学习(卷积核,通道,padding,stride等概念)
  4. boost::test模块测试树管理单元测试
  5. java多线程写在哪一层_面试知识点三:Java多线程
  6. scn exercise view.setModel will trigger binding creation in Fiori
  7. 计算机二级mysql报名2020_关于2020年秋季全国计算机等级考试报名的通知
  8. 1089 狼人杀-简单版 (20 分)
  9. 软件工程六大设计原则总结,案例演示
  10. Elasticsearch】es 模糊查询导致Elasticsearch服务宕机
  11. this调用语句必须是构造函数中的第一个可执行语句_详解-JavaScript 的 this 指向和绑定...
  12. spring-cloud Sleuth
  13. mysql inet_aton 与 inet_ntoa 方法
  14. 【精通内核】CPU控制并发原理CPU中断控制内核解析
  15. 用Python进行数据整理
  16. java控制台贪食蛇_java中的贪食蛇例程
  17. JS+CSS实现漂亮的日历特效(仿win10系统日历)
  18. Windows10莫名其妙多了个CD驱动器,删除方法记录
  19. 用你的浏览器来静态分析网站源码——初级漏洞赏金猎人指南
  20. php增加vip等级设置,会员管理系统中商家如何设置会员等级

热门文章

  1. 3208点阵时钟c语言程序,点阵万年历(带时间、年月日星期调整及闹钟功能)C程序...
  2. 【2019南昌邀请赛现场赛 - G】Winner(思维、图论+缩点)
  3. DBpedia Introduction
  4. 阿里数据仓库-数据模型建设方法总结(全)
  5. SPI Flash芯片W25Q32英文版数据手册解读(一)---------引脚功能,工作模式
  6. 在计算机网络的s,在计算机网络中传输二进制信息时,经常使用的速率单位有“kb/s”、“Mb/s”等。其中,1Mb/s=1000kb/s...
  7. python 三维曲线拟合_python实现三维拟合的方法
  8. Sql Server 创建唯一聚集索引典型实现
  9. 解决阿里云OSS使用URL无法访问图片
  10. 【翻译】MED 3D: TRANSFER LEARNING FOR 3D MEDICAL I MAGE ANALYSIS