シーンでマウストラッキング

2016/09/02

Widgetで、マウスが動くと呼び出されるメソッドmouseMoveEvent()は、デフォルトではマウスをドラッグしたときにしか反応せず、常にマウスを動かすたびに呼び出されるようにするには、setMouseTracking(True)とする必要がある。

でも、QGraphicsSceneの場合は、setMouseTracking()がないので、どうするかというと、

QGraphicsView.viewport().setMouseTracking(True)

とするらしい。


# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtGui

class MyMainWindow(QtGui.QMainWindow):
    def __init__(self, *argv, **keywords ):
        super(MyMainWindow,self).__init__(*argv,**keywords)
        self.view = QtGui.QGraphicsView(self)
        self.setCentralWidget(self.view)

        self.scene = MyGraphicsScene(self)
        self.view.setScene(self.scene)
        self.view.viewport().setMouseTracking(True)

        self.setGeometry(100,100,500,400)


class MyGraphicsScene(QtGui.QGraphicsScene):

    def mouseMoveEvent(self,event):
        print(event.scenePos())

def main():
    app = QtGui.QApplication(sys.argv)
    w = MyMainWindow()
    w.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

   

ふー、この情報に行き着くまでやたらかかりました。。。

Problem in MouseMoveEvent
http://www.qtcentre.org/archive/index.php/t-4254.html