6

QGraphicsItemマウスボタンが押されている間にマウスカーソルが移動したとき、つまりマウスがアイテムに入る前にボタンが押されたときを検出したい。私の最初のアイデアは を使用することhoverEnterEventでしたが、マウスの左ボタンが押されたときにトリガーされないようです。私の他のアイデアは を使用することdragEnterEventでしたが、まったくトリガーされないようです ( setAcceptDrops(True).

カーソルがアイテムの上に移動し、マウス ボタンが押されたことを検出する最良の方法は何ですか?

4

2 に答える 2

4

この質問を見つけたばかりです。古いことはわかっていますが、この問題を抱えている人にとって私の答えが役立つことを願っています。

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)
于 2012-03-21T13:49:25.613 に答える
0

と を試してmouseMoveEvent()くださいmousePressEvent()。それらが役に立たない場合は、仮想メソッドを再実装する必要があります

bool QGraphicsItem::sceneEvent ( QEvent * event )

内部でマウス ボタンの状態を確認し、適切なイベント ハンドラを呼び出します。

于 2011-04-16T21:34:14.293 に答える