2010-10-02 103 views
3

我想要在鼠標按鈕被按下時檢測鼠標光標在QGraphicsItem上的移動,即在鼠標進入項目之前按下該按鈕。我的第一個想法是使用hoverEnterEvent,但它似乎沒有按下鼠標左鍵時觸發。我的另一個想法是使用dragEnterEvent,但它似乎根本沒有觸發(即使我已經使用setAcceptDrops(True)當鼠標按下按鈕進入QGraphicsItem時檢測到

什麼是最好的方式來檢測當光標在項目頂部移動和鼠標按鈕按下?

+0

您可能必須在圖形場景級別過濾鼠標事件,併爲每個小部件添加一些鼠標停止的通知。但是,我會認爲拖動事件應該已經奏效。 – 2010-10-04 18:24:58

+0

我面臨同樣的問題。希望聽到答案。將結帳拖動事件。 – problemofficer 2010-11-17 06:07:29

回答

0

嘗試mouseMoveEvent()mousePressEvent()。如果他們不幫你,那麼你就需要重新實現虛方法

bool QGraphicsItem::sceneEvent (QEvent * event) 

檢查鼠標按鈕的狀態裏面並調用相應的事件處理程序。

2

我剛剛發現這個問題,我知道它已經很老了,但我希望我的回答對於有這個問題的人有用。

QGraphicsViewQGraphicsScene派生類覆蓋mouseMoveEvent方法並檢查事件的buttons屬性以瞭解當前按下的按鈕。以下是我正在處理的一個小型項目的PyQt4中的示例代碼:

def mouseMoveEvent(self, event): 
    buttons = event.buttons() 
    pos = self.mapToScene(event.pos()) 
    object = self.scene().itemAt(pos) 

    type = EventTypes.MouseLeftMove if (buttons & Qt.LeftButton) else\ 
      EventTypes.MouseRightMove if (buttons & Qt.RightButton) else\ 
      EventTypes.MouseMidMove if (buttons & Qt.MidButton) else\ 
      EventTypes.MouseMove 

    handled = self.activeTool().handleEvent(type, object, pos) 

    if (not handled): 
     QGraphicsView.mouseMoveEvent(self, event) 
相關問題