使用PyQT,如何过滤带有定制lis的QComboBox的mousePressEvent

2024-10-01 13:42:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Screenshot.

customlist对象有一个自定义的mousePressEvent,因此当用户单击带有+/-(一个曲折的)的圆时,列表将展开/折叠。在

当我将列表与组合框一起使用时,当用户单击一个twisty时,列表将展开/折叠,但选择将更改,列表将隐藏。我如何过滤它,以便当用户点击一个扭曲,选择不改变,列表不隐藏。在

其他屏幕截图

所有节点折叠: All nodes collapsed.

列表隐藏: Screenshot with the list hidden.


Tags: 对象用户列表节点屏幕qcomboboxmousepresseventcustomlist
2条回答

在我的脑子里,你可以子类QComboBox并重写hideEvent(QHideEvent)(继承自QWidget

def hideEvent(self, event):
  if self.OkToHide():
    event.accept()
  else:
    event.ignore()

你的截图看起来像是组合框的有趣用法,我很好奇为什么你没有使用TreeView样式的控件而不是列表?在

编辑(2009年3月14日):

我查看了Qt源代码,当捕捉到键盘和鼠标事件时,Qt一旦决定发出"activated(int index)"信号,"hidePopup()"就被调用了。在

因此,除了重写事件过滤器代码外,另一个选择是将"activated(int index)""highlighted(int index)"信号连接到一个可以调用"showPopup()"的插槽,该插槽将重新提升列表项。如果出现严重的“消失/显示”绘制问题,则可能需要让Qt在弹出窗口可见时延迟绘制事件。在

希望有帮助!在

QT有一个eventFilter,它“捕获”QEvent.MouseButtonRelease。因此,我所做的就是安装我自己的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在^{之前运行。在

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

^{pr2}$

相关问题 更多 >