コード例 #1
0
    def eventFilter(self, obj, event):
        """
        Filter events if this object has been installed as an event
        filter for the watched object.

        Arguments:
            obj (QObject): Watched object.
            event (QEvent): Event being processed.

        Returns:
            bool: True if event should be filtered out (i.e. if further
            processing should be stopped); False otherwise.
        """
        res = True

        if obj == self._list:
            if event.type() == QEvent.Leave:
                self._setSelected(0)
            res = False
        else:
            if event.type() == QEvent.MouseMove:
                if not self._list.viewport().rect().contains(event.pos()):
                    self._setSelected(0)
                elif self._list.itemAt(event.pos()):
                    row = self._list.row(self._list.itemAt(event.pos())) + 1
                    self._setSelected(row)
            elif event.type() == QEvent.MouseButtonRelease:
                self._accept()
            elif event.type() in [
                    QEvent.MouseButtonPress, QEvent.MouseButtonDblClick
            ]:
                pass
            else:
                res = False
        if res:
            return True
        else:
            return QMenu.eventFilter(self, obj, event)