这是 Qt 的GraphicsItem的一项优化造成的,因为GraphicsItem不像QWidget只有很少的实例,GraphicsItem实例可以非常多,甚至可以到百万个,所以每次鼠标移动都去分发mouse move事件开销太大了,而且没必要,真正需要mouse move事件的item是很少的。
但是 Qt 提供了一个开关选项
void QGraphicsItem::setAcceptHoverEvents ( bool enabled )
打开这个选项,就可以接收到以下事件了
hoverEnterEvent(), hoverMoveEvent(), and hoverLeaveEvent().
那么mouseMoveEvent呢?在Qt Graphics item里mouse 的move和hover是不一样的。
hover是指鼠标经过,但是鼠标任何按键没有按下
move是指按下鼠标键后拖动,所以要先响应 mousePressEvent 返回 accepted,然后才会接收到move,只有响应了press的那个item才能接收到后续的move,直到mouseReleaseEvent。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有