PyQt4鼠标移动事件:查找widget

PyQt4 mouse move event: find widget

如何找到触发事件的是哪个小部件?该位置相对于其下方任何小部件的原点。我想将事件限制为只有一个 wiget。

def eventFilter(self, source, event):
    if event.type() == QtCore.QEvent.MouseMove:
        if event.buttons() == QtCore.Qt.NoButton:
            pos = event.pos()
            self.statusbar.showMessage("mouse tracked at {} x {}".format(pos.x(), pos.y()))
            print(dir(event))
            # self.edit.setText('x: %d, y: %d' % (pos.x(), pos.y()))
    return QtGui.QMainWindow.eventFilter(self, source, event)

通过 eventFilter 传递的事件仅限于明确安装了事件过滤器的小部件。如果只有一个小部件安装了事件过滤器,则 source 参数只能是那个小部件。

如果多个小部件在同一个过滤对象上安装了一个事件过滤器,您可以使用身份检查来区分它们:

def eventFilter(self, source, event):
    if (event.type() == QtCore.QEvent.MouseMove and
        event.buttons() == QtCore.Qt.NoButton and
        source is self.myInterestingWidget):
        # do stuff with event...
        print(event.pos())
    return QtGui.QMainWindow.eventFilter(self, source, event)