2

でホバー入力イベントとホバー離脱イベントをキャプチャするのに問題がありますQGraphicsRectItem

私はこのオブジェクトをサブクラス化し、hover enter および hover leave ハンドラーを再実装しました... または、少なくとも実装したと思います。また、コンストラクターでホバー イベントの受け入れを 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

hoverEnterEventhoverLeaveEventを仮想としてマークしましたか?そうしないと、イベントがトリガーされる可能性がありますが、QGraphicsItem代わりにがイベントを処理します。

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

あなたのアイテムは の下にありQGraphicsItemGroupますか?

この引用を見つけるまで、私はまったく同じ問題を抱えていました:

「AQGraphicsItemGroupは、それ自体とそのすべての子を 1 つのアイテムとして扱う特殊なタイプの複合アイテムです (つまり、すべての子のすべてのイベントとジオメトリが一緒にマージされます)。」

(ここを見てください: http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html )

これが意味することは、 が をQGraphicsItemGroup呼び出すということsetHandlesChildEvents(true)です。

parentItem->setHandlesChildEvents(false)アイテムの上にある任意の (およびすべての) グループを呼び出して、ホバー イベントをキャプチャすることで問題を解決しました。ふふっ!あなたが言及した仮想コールバックにイベントが表示され始めました。

于 2013-05-08T18:56:48.140 に答える