2010-05-30 44 views
15

Tôi có một lớp bắt nguồn từ QGraphicsView, trong đó có QGraphicsItem các phần tử được lưu trữ. Tôi muốn những yếu tố này thay đổi màu sắc bất cứ khi nào con trỏ chuột di chuyển lên họ, vì vậy tôi thực hiện hoverEnterEvent (và hoverLeaveEvent):QGraphicsItem không nhận các sự kiện chuột di chuột

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

Tuy nhiên, điều này đang xử lý sự kiện không bao giờ được thực thi. Tôi đã bật theo dõi chuột rõ ràng:

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

Vẫn không may mắn. Tôi đang làm gì sai?

Trả lời

22

Đã sửa lỗi. Tôi cần phải sử dụng setAcceptHoverEvents(true) trong hàm tạo của lớp học QGraphicsItem-được cấp.

+1

Tôi đã gặp sự cố tương tự này và việc xóa triển khai 'mouseMoveEvent' khỏi' QGraphicsView' cũng cần thiết để khắc phục sự cố. Bây giờ tôi có nó làm việc tôi có thể có thể thêm 'mouseMoveEvent' trở lại miễn là tôi tìm ra một cách để nó không ăn lên' QEvent'. –

+0

Cảm ơn bạn rất nhiều! Bạn vừa kết thúc nỗi đau khổ lớn –

+0

@CoryKlein bạn đã tìm cách sử dụng cả hai sự kiện mouseMoveEvent và di chuột? – lena

1

Trong trường hợp của tôi, sự kiện di chuột sẽ không hoạt động nếu tôi ghi đè mouseMoveEvent khi triển khai lớp QGraphicsView. Tôi đã khắc phục sự cố này bằng cách thêm một cuộc gọi đến

QGraphicsView::mouseMoveEvent(event); 

tuyên truyền sự kiện này cho phụ huynh, sau đó gửi nó đến tất cả các mục cảnh.

Các vấn đề liên quan