2010-05-30 16 views
15

Mam klasę pochodną od QGraphicsView, która zawiera QGraphicsItem -przygotowane elementy. Chcę te elementy, które zmieniają kolor, gdy kursor myszy znajdzie się nad nimi, tak I wdrożone hoverEnterEvent (i hoverLeaveEvent):QGraphicsItem nie odbiera zdarzeń myszy po najechaniu myszką

void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event) 
{ 
    update (boundingRect()); 
} 

Jednak ten kod obsługi zdarzenia nigdy nie jest wykonywany. Mam wyraźnie włączone śledzenie myszy:

MyGraphicsView::MyGraphicsView(MainView *parent) : 
    QGraphicsView(parent) 
{ 
    setMouseTracking(true); 
    viewport()->setMouseTracking(true); 
    ... 
} 

Nadal nie ma szczęścia. Co ja robię źle?

Odpowiedz

22

Naprawiono. Muszę użyć setAcceptHoverEvents(true) w konstruktorze mojej klasy QGraphicsItem.

+1

Miałem ten sam problem i usunięcie poprawki 'mouseMoveEvent' z mojego' QGraphicsView' również było konieczne, aby to naprawić. Teraz, gdy mam to działa, mógłbym prawdopodobnie dodać 'mouseMoveEvent', dopóki znajdę sposób na to, aby nie zjadł' QEvent'. –

+0

Dziękuję bardzo! Właśnie zakończyłeś wielkie cierpienie –

+0

@CoryKlein znalazłeś sposób na użycie zdarzeń mouseMoveEvent i hover? – lena

1

W moim przypadku, najedź zdarzenia nie będzie działać, jeśli overrode mouseMoveEvent w moim realizacji QGraphicsView klasie. Naprawiłem to, dodając rozmowę pod numerem

, która propagowała wydarzenie do rodzica, który z kolei wysłał je do wszystkich elementów sceny.

Powiązane problemy