2014-09-24 33 views
0

我正在製作一個接口來比較將要完成一些處理的圖像。具體來說,第一個應該是一個彩色圖像,第二個灰度,第三個應用邊緣濾波器,可能更多。能夠縮放和拖動這些圖像中的任何一個並使其他圖像以相同的方式進行比較來進行比較會很好。如何使多個QGraphicsView在其中任何一個執行動作時拖動/移動圖像

現在我有三對QGraphicsScene和QGraphicsView,它們中的每一對都包含適當圖像,顏色或灰度等的QPixmap。我設法通過將事件過濾器附加到所有QGraphicsView並捕捉鼠標滾輪滾動事件並將其分發給所有其他人。然而,這並不像圖像拖動那樣容易,因爲它由多個事件組成。

它感覺非常「黑」在一起,我想知道是否有更好的方法來實現這一目標。這是事件過濾器目前我有,不用於拖動工作的代碼:

def eventFilter(self, obj, event): 
    if obj == self.viewA.viewport() or obj == self.viewB.viewport() or obj == self.viewC.viewport(): 
     if event.type() == QtCore.QEvent.Wheel: 
      # This function passes the event to all the QGraphicsView's 
      self.wheelEvent(event) 
      return True 
     elif event.type() == QtCore.QEvent.MouseMove: 
      # This doesn't work but just to give an idea of what I'm trying to achieve 
      self.viewA.mouseMoveEvent(event) 
      self.viewB.mouseMoveEvent(event) 
      self.viewC.mouseMoveEvent(event) 

      return True 

    return False 

回答

0

我覺得你的問題,從這個事實根源在於QGraphicsViews無能爲力了mouseMoveEvent,除非在單擊鼠標在他們。 (即您單擊,拖動然後釋放,而不僅僅是將鼠標移到視圖上)。

我建議處理適當的點擊和釋放事件以及eventFilter中的mouseMoveEvent。您需要使用bool來確定是否正在發生您關心的拖動。

一個可能的替代方案,我不確定這個方法是否可以工作,而不是使用mouseMoveEvent,您可能需要使用dragMoveEvent。

+0

謝謝,將MouseMove,MouseButtonPress和MouseButtonRelease事件轉發給所有圖形視圖都會有訣竅。一個布爾不是必須的。我也檢查了拖動事件,但他們不在圖形視圖中觸發。 – Rubenknex 2014-09-25 09:08:28

相關問題