【发布时间】:2012-09-14 15:57:40
【问题描述】:
我无法在 QGraphicsRectItem 中捕获悬停进入和悬停离开事件。
我已经对这个对象进行了子类化,并重新实现了悬停进入和悬停离开处理程序......或者至少我认为我有。我还在构造函数中将接受悬停事件设置为 true。
但是,该事件永远不会被触发。处理程序中的断点永远不会被命中。
这是课程:
#include "qhgraphicsrectitem.h"
QhGraphicsRectItem::QhGraphicsRectItem(QGraphicsRectItem *parent) :
QGraphicsRectItem(parent)
{
setAcceptHoverEvents(true);
setAcceptsHoverEvents(true);
}
void QhGraphicsRectItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
oldBrush = brush();
setBrush(QBrush(QColor((oldBrush.color().red() + (0.5 * (255-oldBrush.color().red()))),(oldBrush.color().green() + (0.5 * (255-oldBrush.color().green()))),(oldBrush.color().blue() + (0.5 * (255-oldBrush.color().blue()))))));
}
void QhGraphicsRectItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
setBrush(oldBrush);
}
我做错了什么?
【问题讨论】:
-
发布的代码看起来不错,除了“setAcceptsHoverEvents”不是QGraphicsItem的方法。也许那是你做过的其他事情。无论如何,您可能必须在
setBrush之后调用update()。你在搞乱矩形吗? -
@Anthony 我没有改变矩形,不。我也没有用我的 QGraphicsView 或 QGraphicsScene 处理这些事件......我尝试更新,没有任何反应。
-
"setAcceptsHoverEvent" 曾经在课堂上,他们把它拿出来已经贬值了,如果你检查他们的来源你会看到。项目不会获得悬停事件,因为默认情况下当鼠标启动时不会发生 mousemove 事件。要获得这些,覆盖或使用 QGraphicsView::setMouseTracking(true) 来获取鼠标移动事件,无需按下按钮...我个人不得不将代码从 setAcceptsHoverEvents 更新为 setAcceptHoverEvents,似乎改变是一件愚蠢的事情,但我想这并不是完全明确的,所以..