私はノードグラフを作成しています。シーン内の空きスペースをクリックし、中マウスをドラッグしてシーン内の現在選択されているアイテムを選択解除せずに移動できるようにします。助言がありますか?中マウスのクリックがQGraphicsSceneの項目をシーン内の項目からブロックせずに選択を解除する方法を教えてください。
ビューのmousePressEventで中クリックをブロックして正しい動作を得ることができますが、シーン内のアイテムに作用する中マウスのクリックイベントがなくなります。シーン内の項目をクリックすると、中クリックが1つの選択になっても構いませんが、シーン内の空のスペースをミドルクリックすると、選択が変更されることはありません。私は、問題は、私はPyQtは/ PySideを使用しています同じ
だろうと仮定して、私はeventFilterを使用しようとしなかったPyQt. How to block clear selection on mouse right click?
:
これは私が探しています、より複雑な動作をカバーしていません、FWIW。
私は自分の回避策を公開する前に、正しい方法または少なくとも他の回避策のアイデアを投稿すると思いました。
いくつかの回避策のアイデア:
- ブロックのシーンにmousePressEventが、直接
- それを実現しながら、シーンにmousePressEventで、まだ選択を復元するために子項目を反復処理。おそらくスケールでのパフォーマンスは悪いですが、単純です。
フィードバックは素晴らしいです!
[編集:] ここは私の答えのpythonバージョンです。コードがテストされました。私QGraphicsScene派生クラスでは:それは中央のマウスクリックだ場合、あなたのQGraphicsScene::mousePressEvent
派生実装で
def mousePressEvent(self, event):
# Prevent the QGraphicsScene default behavior to deselect-all when clicking on
# empty space by blocking the event in this circumstance.
item_under_the_mouse = self.itemAt(event.scenePos())
if event.button() == QtCore.Qt.MidButton and not item_under_the_mouse:
event.accept()
else:
super(GraphScene, self).mousePressEvent(event)
これは私が向かっていた方向です。喜んで確認を確認してください。私はそれが動作するようになると私はPythonのバージョンを投稿します。 – Rafe
優れています...私はPythonを知らないが、回答で前後に変換するのはかなり簡単だとわかっている。 – goug