2

我无法在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);
}

我做错了什么?

4

2 回答 2

1

您是否将您的hoverEnterEvent和标记hoverLeaveEvent为虚拟的?如果您不这样做,则事件可能正在触发,但QGraphicsItem正在处理事件。

class QhGraphicsRectItem : public QGraphicsItem
{
    ...
    virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
    virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
}
于 2012-09-14T20:46:33.927 回答
1

您的物品是否位于QGraphicsItemGroup?

在找到这句话之前,我遇到了完全相同的问题:

“AQGraphicsItemGroup是一种特殊类型的复合项,它将自身及其所有子项视为一个项(即,所有子项的所有事件和几何图形都合并在一起)。”

(看这里:http: //qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html

这意味着QGraphicsItemGroup调用setHandlesChildEvents(true).

我通过调用parentItem->setHandlesChildEvents(false)位于我的项目上方的任何(和所有)组来捕获悬停事件来解决我的问题。噗!这些事件开始出现在您提到的虚拟回调中。

于 2013-05-08T18:56:48.140 回答