c++ - 使用悬停事件

标签 c++ qt qt-events

我在捕获 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/

相关文章:

c++ - Qt:在 child 之前捕获事件

c++ - 如何在构造函数完成后立即销毁从 QWindow 对象派生的对象?

c++ - 跳过输入文件中的读取行c++

c++ - 创建虚拟分区

c++ - QPainter:仅绘制放大图像的可见区域

c++ - 对 QComboBox 中的项目使用 Qt::UserRole 和 Qt::DisplayRole

c++ - 循环 try...catch... 以确保输入有效或使用控制语句?

c# - 在 UWP 应用程序中加载和显示 DDS (DXT1) 文件

c++ - Qt 文件夹浏览器多次打开