2010-02-01 37 views
1

我正在使用Qt Graphics View框架創建一個場景並將多個視圖附加到相同的場景,其中這些視圖呈現3D場景作爲背景,而2D繪圖則是一種疊加層。QGraphicsView接受的事件

我想攔截我的OverlayViewport類(繼承QGraphicsView)中的鼠標/鍵事件並相應地導航3D場景。下面是一個示例事件處理程序:

void OverlayViewport::mouseMoveEvent(QMouseEvent * event) 
{ 
    QGraphicsView::mouseMoveEvent(event); 
    if (event->isAccepted()) 
    { 
     return; 
    } 

    3D_Scene_Stuff_Code(); 
} 

但事件總是被接受,因此我的3D場景的東西代碼永遠不會執行。如果我刪除了isAccepted()檢查,我的代碼總是執行。

我想要實現的是,讓場景像選擇,拖動vs,如果它沒有做任何事情(不接受事件),做我的3D的東西。

所以,這裏是我的問題:
1 - 我在錯誤的道路上嗎?
2 - 如果事件未被場景接受,我應該將事件轉發到視圖所附的場景並做我的事情嗎?
3 - 如果不是2,我應該如何繼續?

最好的問候。

回答

0

我發現了罪魁禍首。這似乎是Qt中的一個錯誤。 QGraphicsView不會正確設置mouseMoveEvents的接受標誌。這隻發生在mouseMoveEvents上,其他事件都很好。據報道,Qt正在等待修復。

+0

你會如此友善地發佈相應的錯誤報告的URL嗎?我正在使用Qt 5.1(也檢查過Qt 5.2)並面臨同樣的問題。你有沒有發現你的案件的任何解決方法? – 2014-01-19 11:04:57

+0

它似乎是修復和關閉,但在這裏你去: https://bugreports.qt-project.org/browse/QTBUG-8061 – erelender 2014-01-23 14:43:35

+0

我見過那一個,但它與mouseDoubleClickEvent()有關,但你在原始文章中提到了mouseMoveEvent()。這就是我問的原因。 – 2014-01-24 06:31:01