zoukankan      html  css  js  c++  java
  • PyQt学习随笔:应用中通过installEventFilter安装重写的eventFilter捕获应用事件的方法

    eventFilter函数是直接从QObject继承的定义的事件刷选虚拟函数,如果一个对象A使用installEventFilter函数将另一个对象B安装了B的实例方法eventFilter,则这个对象B将会调用eventFilter进行事件刷选。

    修订:上面这段话的描述有误,经过后期学习及测试,eventFilter方法无需是B本身的实例方法,只要是任何一个QObject派生类的eventFilter方法都可以,就是说,安装者、被监视对象以及eventFilter方法所在对象可以是三个独立对象。具体可参考《PyQt(Python+Qt)实现的GUI图形界面应用程序的事件捕获方法大全及对比分析》的详细介绍。

    在实现eventFilter函数时,如果要筛选出事件停止进一步处理它,则返回True;否则返回False,如果不知道怎么处理,则调用父类eventFilter方法返回。

    eventFilter语法

    bool QObject.eventFilter(QObject watched, QEvent event)
    其中:
    1、watched就是被安装了eventFilter的对象;
    2、event就是接收到的事件信息;
    3、返回值为True则该事件不会再传递,否则会继续传递。

    installEventFilter语法

    installEventFilter(QObject filterObj)
    其中:filterObj就是需要进行事件刷选的对象,该方法无返回值。

    案例:

    如果要在一个窗口中进行事件刷选,可以在该窗口自定义类中实现eventFilter方法,并在应用中安装该方法。

    示例代码1:实现eventFilter方法

    class winTest(QtWidgets.QMainWindow,Ui_wintest.Ui_MainWindow ):
        def __init__(self):
            super(winTest, self).__init__()
            self.setupUi(self)
            self.setWhatsThis("窗口属性设置测试")
    
        def eventFilter(self, objwatched, event):
            eventType = event.type()
    
            flag = False
            if eventType == QEvent.MouseButtonPress or eventType == QEvent.KeyPress:
                print(f"***************In eventFilter:事件类型值={eventType},事件objwatched={objwatched}")
            elif eventType == QtCore.QEvent.Close:
                print(f"***************In eventFilter:事件类型值={eventType},事件objwatched={objwatched}")
                showMessage(self, 'eventFilter警告',"系统将退出,是否确认?", QMessageBox.Yes |QMessageBox.No, QMessageBox.No)
    
            return super().eventFilter(objwatched, event)
    

    示例代码2:在主程序中给主窗口对象安装事件刷选

    if __name__ == '__main__':
        app = App(sys.argv)
        w = winTest()
        w.show()
        app.installEventFilter(w) 
        sys.exit(app.exec_())
    

    博客地址:https://blog.csdn.net/LaoYuanPython

    老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

  • 相关阅读:
    tomcat7配置
    C# FTP常规方法
    C++ 用libcurl库进行http通讯网络编程
    webkit webApp 开发技术要点总结[转]
    websocket
    Linux下使用logrotate实现日志切换
    Linux日志文件utmp、wtmp、lastlog、messages
    妙用git rebase --onto指令
    iptables命令详解和举例
    linux下IPTABLES配置详解
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11931693.html
Copyright © 2011-2022 走看看