我想要在鼠標按鈕被按下時檢測鼠標光標在QGraphicsItem
上的移動,即在鼠標進入項目之前按下該按鈕。我的第一個想法是使用hoverEnterEvent
,但它似乎沒有按下鼠標左鍵時觸發。我的另一個想法是使用dragEnterEvent
,但它似乎根本沒有觸發(即使我已經使用setAcceptDrops(True)
。當鼠標按下按鈕進入QGraphicsItem時檢測到
什麼是最好的方式來檢測當光標在項目頂部移動和鼠標按鈕按下?
我想要在鼠標按鈕被按下時檢測鼠標光標在QGraphicsItem
上的移動,即在鼠標進入項目之前按下該按鈕。我的第一個想法是使用hoverEnterEvent
,但它似乎沒有按下鼠標左鍵時觸發。我的另一個想法是使用dragEnterEvent
,但它似乎根本沒有觸發(即使我已經使用setAcceptDrops(True)
。當鼠標按下按鈕進入QGraphicsItem時檢測到
什麼是最好的方式來檢測當光標在項目頂部移動和鼠標按鈕按下?
嘗試mouseMoveEvent()
和mousePressEvent()
。如果他們不幫你,那麼你就需要重新實現虛方法
bool QGraphicsItem::sceneEvent (QEvent * event)
檢查鼠標按鈕的狀態裏面並調用相應的事件處理程序。
我剛剛發現這個問題,我知道它已經很老了,但我希望我的回答對於有這個問題的人有用。
在QGraphicsView
或QGraphicsScene
派生類覆蓋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)
您可能必須在圖形場景級別過濾鼠標事件,併爲每個小部件添加一些鼠標停止的通知。但是,我會認爲拖動事件應該已經奏效。 – 2010-10-04 18:24:58
我面臨同樣的問題。希望聽到答案。將結帳拖動事件。 – problemofficer 2010-11-17 06:07:29