使用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
标签:qcombobox,pyqt,qt4,python,qt 来源: https://codeday.me/bug/20191210/2103486.html