zoukankan      html  css  js  c++  java
  • 事件处理机制入门

    1. 常见事件类型

    PyQt是对Qt的封装,Qt程序是事件驱动的,它的每个动作都由幕后某个事件所触发,Qt事件的类型有很多,常见的Qt事件如下:

      键盘事件:按键按下和松开。

      鼠标事件:鼠标指针移动、鼠标按键按下和松开。

      拖放事件:用鼠标进行拖放。

      滚轮事件:用鼠标滚滚轮动。

      绘屏事件:重绘屏幕的某些部分。

      定时事件:定时器到时。

      焦点事件:键盘焦点移动。

      进入和离开事件:鼠标指针移入Widget内,或者移出。

      移动事件:Widget的位置改变。

      大小改变事件:Widget的大小改变。

      显示和隐藏事件:Widget显示和隐藏。

      窗口事件:窗口是否为当前窗口。

      还有一些常见的Qt事件,比如如Socket事件、剪贴板事件、字体改变事件、布局改变事件等。

    2. 使用事件处理的方法

    PyQt提供了如下5种事件处理和过滤方法(由弱到强),其中只有前两种方法使用最频繁。
    (1)重新实现事件函数
    比如 mousePressEvent()、 keyPressEvent()、 paintEvent()。这是最常规的事件处理方法。
    (2)重新实现 Qobjec.event()
    一般用在PyQt没有提供该事件的处理函数的情况下,即增加新事件时。
    (3)安装事件过滤器
    如果对 Qobject i调用 installEventFilter,则相当于为这个 Qobject安装了一个事件过滤器,对于 Qobject的全部事件来说,它们都会先传递到事件过滤函数 eventFilter中,在这个函数中我们可以抛弃或者修改这些事件,比如可以对自己感兴趣的事件使用自定义的事件处理机制,对其他事件使用默认的事件处理机制。由于这种方法会对调用 installEventFilter的所有 Qobject I的事件进行过滤,因此如果要过滤的事件比较多,则会降低程序的性能。
    (4)在 QApplication中安装事件过滤器
    这种方法比上一种方法更强大: Application的事件过滤器将捕获所有 QObject的所有事件,而且第一个获得该事件。也就是说,在将事件发送给其他任何一个事件过滤器之前(就是在第三种方法之前),都会先发送给 QApplication的事件过滤器。
    (5)重新实现 QApplication的 notify()方法
    PyQt使用 notify()来分发事件。要想在任何事件处理器之前捕获事件,唯一的方法就是重新实现 QApplication的 notify()。在实践中,在调试时才会使用这种方法。

  • 相关阅读:
    C#中的静态
    C#类的使用
    C#接口实现多态
    C#---->类和接口
    winform项目导入数据
    kms访问数据库的方式(该篇只是作为个人笔记,不具有任何公共参考意图)
    win7下安装docker toolbox
    JabRef:将bibtex格式的参考文献导入EndNote的转换软件
    RabbitMQ安装以及简单操作应用(针对Windows和C#)
    C# Task和异步方法
  • 原文地址:https://www.cnblogs.com/lynsha/p/13491704.html
Copyright © 2011-2022 走看看