我在捕获 QGraphicsRectItem
中的悬停进入和悬停离开事件时遇到问题。
我已经对该对象进行了子类化,并重新实现了悬停进入和悬停离开处理程序......或者至少我认为我已经实现了。我还在构造函数中将接受悬停事件设置为 true。
但是,该事件从未被触发。处理程序内的断点永远不会被命中。
这是类(class):
#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);
}
我做错了什么?
最佳答案
您的项目是否位于QGraphicsItemGroup
下?
在我找到这句话之前,我遇到了完全相同的问题:
“QGraphicsItemGroup
是一种特殊类型的复合项目,它将自身及其所有子项目视为一个项目(即,所有子项目的所有事件和几何图形都合并在一起)。”
(看这里:http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html)
这意味着QGraphicsItemGroup
调用setHandlesChildEvents(true)
。
我通过在项目上方的任何(和所有)组上调用 parentItem->setHandlesChildEvents(false)
来捕获悬停事件,从而解决了我的问题。噗!这些事件开始出现在您提到的虚拟回调中。
关于c++ - 使用悬停事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428045/