简单地说,我想跟踪QGraphicsView
上的鼠标坐标。
This answer适用于QLabel
对象,但在切换到QGraphicsView
时不能正常工作,如下所示:
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.graphicsView = QtGui.QGraphicsView(self)
self.graphicsView.setMouseTracking(True)
self.graphicsView.installEventFilter(self)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.graphicsView)
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.MouseMove and
source is self.graphicsView):
pos = event.pos()
print('mouse move: (%d, %d)' % (pos.x(), pos.y()))
return QtGui.QWidget.eventFilter(self, source, event)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
window.resize(200, 100)
sys.exit(app.exec_())
具体来说,只有当我的光标移动到QGraphicsView的边界 时,才会捕获事件。
有谁可以告诉我为什么,还有更好的解决方案吗?
答案 0 :(得分:3)
对于某些小部件,您需要使用其视口:
self.graphicsView.viewport().installEventFilter(self)
...
def eventFilter(self, source, event):
if (event.type() == QtCore.QEvent.MouseMove and
source is self.graphicsView.viewport()):
...
答案 1 :(得分:2)
另一种方法是直接覆盖mouseMoveEvent(event)
的{{1}}。
示例:
QGraphicsView