什么可以阻止mousePressEvent或Event Filter Mouse单击事件? [英] What can block mousePressEvent or Event Filter Mouse Click Events?

查看:625
本文介绍了什么可以阻止mousePressEvent或Event Filter Mouse单击事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我似乎无法在QTreeWidget中点击鼠标。我试过...

I can't seem to get any mouse clicks in a QTreeWidget. I have tried...


  • ...覆盖mousePressEvent,但它根本不运行。甚至不记录消息。

  • ...使用事件文件管理器。它适用于除鼠标点击之外的所有内容。

  • ...使用代理。他们的编辑活动工作正常,但只有在超过一个项目,这是不够的

  • ...确保一切都被添加到布局。我使用QTCreator,输出是使用layout.addWidget()。我还将窗口小部件实例添加到主窗口中的布局。

  • ...overriding mousePressEvent, but it never runs at all. Not even to log a message.
  • ...using an event filer. It works for everything but mouse clicks.
  • ...using delegates. Their editor events work fine, but only when over an item, which isn't enough
  • ...making sure everything is being added to layouts. I used QTCreator and the output is using layout.addWidget(). I am also adding the widget instance to a layout in the main window.

我可以使用答案将窗口小部件注册为QTreeWidget的事件过滤器如下所示:

I was able to use the answer to register the widget as an event filter for the QTreeWidget like so:

# In __init___
    # self.tree is the QTreeWidget
    self.tree.viewport().installEventFilter(self)



def eventFilter(self, target, event):
    """ 
    This widget is an event filter for the tree, so this function is triggered 
    automatically
    """
    # Print on right-click
    if (event.type() == QEvent.MouseButtonPress and 
        event.button() == Qt.RightButton):
        print("Right Click")

    # Don't block/accept the event
    return False


推荐答案

因为你可以看到QTreeWidget 实际上是 viewport()。您在其 viewport()之间引导安装事件过滤器。

because what you can see (and click) on QTreeWidget is actually it's viewport(). You sholud install event filter on it's viewport() instead.

这篇关于什么可以阻止mousePressEvent或Event Filter Mouse单击事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆