如何在任意QWidget上捕获鼠标事件?

4

我正在使用PythonQt构建一个图形用户界面(GUI)。标准小部件非常有用且可以直接使用。然而,我对鼠标手势有一些想法。更具体地说:一个按钮、标签或文本,在被点击并按住鼠标按钮后,鼠标移动时会产生特殊效果。

为以下事件添加鼠标支持需要什么条件:

  • 在小部件A上点击鼠标(当它可见时)
  • 鼠标实时移动到x,y坐标
  • 释放鼠标按键

对于任意小部件,如何添加鼠标支持?


现在我正在尝试通过类A来实现这个功能,该类继承自QAbstractItemView并拥有一个QWidget。然而,什么都不起作用,并且

NotImplementedError: QAbstractItemView.verticalOffset()是抽象的,必须被重写


QAbstractItemView 是一个抽象类,你必须实现所有纯虚方法才能实例化它。 - trompa
1个回答

3

QAbstractItemView对您的任务没有帮助。

您可以使用installEventFilter在任意小部件上安装事件过滤器。您的过滤器类必须继承自QObject。文档中包含一些有用的示例。请参见QObject::installEventFilter。如果您想要一次性在所有小部件上安装过滤器,可以为QApplication实例安装它。

另一个选项是子类化QWidget(或任何其他QWidget派生类),并重新实现其mousePressEventmouseMoveEventmouseReleaseEvent虚拟函数。


我刚在A中继承了QWidget,现在很高兴地使用mousePressEvent()获取鼠标信息。不确定这是否与您的答案一样好 :( - Vorac
如果从QWidget继承创建新类对您来说很方便,那么这是一个不错的解决方案。然而,我的解决方案不需要您为每个小部件创建新类。在某些情况下,这可能更加方便。 - Pavel Strakhov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接