使用PyQT,如何为带有自定义列表的QComboBox过滤mousePressEvent

我有一个带有自定义列表对象的QComboBox.

自定义列表对象具有自定义的mousePressEvent,因此,当用户单击带有/-(曲折)的圆圈之一时,列表将被展开/折叠.

当我将列表与组合框一起使用时,当用户单击一个曲折的列表时,该列表将被展开/折叠,但是选择被更改,并且该列表被隐藏.我该如何过滤,以便用户单击曲折时不会更改选择,并且不会隐藏列表.

其他截图

所有节点都折叠:

隐藏清单:

解决方法:

QT具有一个“捕获” QEvent.MouseButtonRelease的eventFilter.因此,我完成的工作是安装了自己的eventFilter,如果用户单击某个节点,它会过滤QEvent.MouseButtonRelease事件.

在我的列表对象中,我具有以下方法:

def mousePressEvent (self, e):
    self.colapse_expand_click = False
    if <user clicked node>:
        colapse_expand_node()
        e.accept ()
        self.colapse_expand_click = True

mousePressEvent在mouseReleaseEvent之前运行.

然后在自定义组合框中,过滤事件:

class RevisionSelectorWidget(QtGui.QComboBox):
    def __init__(self, parent = None):
        QtGui.QComboBox.__init__(self, parent)

        self.log_list = RevisionSelectorLogList(self)
        self.setView(self.log_list)
        self.log_list.installEventFilter(self)
        self.log_list.viewport().installEventFilter(self)

    def eventFilter(self, object, event):
        if event.type() == QtCore.QEvent.MouseButtonRelease:
            if self.log_list.colapse_expand_click:
                return True
        return False
上一篇:python-使用QNetworkAccessManager进行Qt HTTP身份验证


下一篇:python-如何在pyqt Qmenu中获取选定的项目