QScrollArea控件的消息分发拦截

QScrollArea控件是一个好东西。它里面有一个Qwidget控件。Qwidget控件的功能不必多说,和matplotlib连接就靠它。当Qwidget控件的大小超过了QScrollArea的大小之后,会有一个可拖动的滚动条。可拖动的滚动条是可以接受鼠标滚轮事件而向上向下滚动的。为了实现qmlcanvas(matplotlib.figurecanvas)的缩放功能,我连接了Qwidget的鼠标滚动事件和matplotlib。为此我设置了一个开关,来切换鼠标滚动是触发QScrollArea控件的滚动条,还是触发Qwidget控件内的鼠标滚动事件:。解决思路如下:

1.为QScrollArea安装事件过滤器,当开关开时,发往该控件的鼠标滚动事件被拦截,不做响应,当开关关时,发往该处的事件作响应。

2.重写QScrollArea这个类,重写wheelEvent事件。

方法1比较简单,但是我测试了一下,并不能很好的起到拦截作用。调用了event.accept()方法之后的事件依然会被响应。因此转用第二种方法:我重写了这个类,重写whellEvent事件,当开关关闭时,将事件传递给父类,在父类中响应

from PyQt5.QtWidgets import QScrollArea as QSLA
class QcScrollArea(QSLA):
    def __init__(self,parent):
        QSLA.__init__(self,parent)
    def setRcs(self,Rcs):
        self.Rcs=Rcs
    def wheelEvent(self,event):
        if self.Rcs.zoomswi==True:
            pass
        else:
            QSLA.wheelEvent(self, event)
        pass


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值