2012-09-14 3 views
2

QGraphicsRectItem 호버 입력 및 호버 이탈 이벤트 캡처에 문제가 있습니다.호버업 이벤트 사용

이 객체를 서브 클래 싱하고 호버 입력 및 호버 이탈 핸들러를 다시 구현합니다 ... 또는 적어도 가지고 있다고 생각합니다. 또한 생성자에서 hover 이벤트를 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); 
} 

그것이 내가 잘못하고 오전 무엇 : 여기

클래스입니까?

+0

QGraphicsItem의 메소드가 아닌 "setAcceptsHoverEvents"를 제외하고 게시 된 코드가 잘 보입니다. 어쩌면 그건 당신이 한 다른 것일 수도 있습니다. 어쨌든'setBrush' 다음에'update()'를 호출해야 할 수도 있습니다. 너는 직사각형을 전혀 망치고 있니? – Anthony

+0

@Anthony 나는 rect를 바꾸지 않을 것이다. 내 QGraphicsView 또는 QGraphicsScene을 사용하여 이러한 이벤트를 처리하지 않습니다 ... 업데이트를 시도했지만 아무 일도 없었습니다. – Luke

+1

"setAcceptsHoverEvent"는 클래스에 있었지만 소스를 확인하면 감가 상각되었습니다. 마우스를 올려 놓으면 mousemove 이벤트가 기본적으로 발생하지 않으므로 항목에 호버 이벤트가 발생하지 않습니다. 그 (것)들을 얻거나, 무시하거나, QGraphicsView :: setMouseTracking (진실한)를 눌러서 눌러야하는 w/o 단추의 아래 보내진 쥐 이동 사건을 얻으십시오 ... 나는 setAcceptsHoverEvents에서 개인적으로 setAcceptsHoverEvents에서 부호를 새롭게해야했다, 보인다 어리석은 일처럼 바뀌지 만 완전히 모호하지는 않았던 것 같아요. – osirisgothra

답변

2

hoverEnterEventhoverLeaveEvent을 가상으로 표시 했습니까? 그렇지 않은 경우 이벤트가 트리거 될 수 있지만 QGraphicsItem이 이벤트를 대신 처리합니다.

+0

나는 그것들을 보호 된 가상 공간으로 정의했습니다. – Luke

+0

이것은 필요하지 않습니다. C++ 11에 대한 적절한 조언은'override'를 표시하는 것입니다. Qt 매크로를 선호하고 Qt 5, Q_DECL_OVERRIDE를 사용한다면 (물론 C++ 98 컴파일러에서는 아무 것도하지 않습니다). –

1

귀하의 물품은 QGraphicsItemGroup에 있습니까? 나는이 따옴표를 찾을 때까지

나는이 똑같은 문제를 가지고 :

"A QGraphicsItemGroup 한 항목 (자체와 모든 자식을 취급 화합물 항목의 특별한 유형입니다 즉, 모든 어린이를위한 모든 이벤트 및 형상 함께 병합됩니다. ")

(여기 봐 : http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html)

이것이 의미하는 것은 QGraphicsItemGroup 전화 setHandlesChildEvents(true).

호버 이벤트를 캡처하기 위해 내 항목 위에있는 모든 그룹 (모두)에서 parentItem->setHandlesChildEvents(false)으로 전화하여 문제가 해결되었습니다. 똥! 당신이 언급 한 가상 콜백에 이벤트가 나타나기 시작했습니다.

+0

다른 문제에 대해이 문제가 발생했지만 OP 문제와 유사한 문제는 해결되지 않습니다. – CodeMode