美文网首页
Qt中事件的理解(1)

Qt中事件的理解(1)

作者: xixiaxi | 来源:发表于2019-07-25 22:09 被阅读0次

1、Qt中的事件

Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QMouseEvent和定时器事件QTimerEvent等,继承关系图如下图所示:

需要说明的是,事件与信号并不相同。

比如:鼠标单击按钮,鼠标事件(QMouseEvent),而按钮本身发射clicked()信号。一般而言我们只需要关注单击信号,不用考虑鼠标事件。但是当我们要对该按钮做额外操作,不想通过信号处理,此时事件就是一个很好的选择。关闭事件(QCloseEvent)是一个常用的事件。

2、事件的处理

鼠标按钮信号分为单机,双击,右键等操作,而这对鼠标事件而言其都是一个鼠标事件,只不过用枚举类型QEvent::Type来区分不同的操作。QEvent的子类能够表示事件却不能处理事件。

信号是通过connect()来绑定槽函数处理响应,那么事件是怎么处理的呢?

处理事件有5种常用的方法:

(1)、重新实现部件的paintEvent()、mousePressEvent()等事件处理函数。这是最常用的一种方法,不过只能用来处理特定部件的特定事件。

(2)、重新实现notify()函数。这个函数的功能强大,提供了完全的控制,可以再事件过滤器得到事件之间就获得他们。但是,它一次只能处理一个事件。

(3)、向QApplication对象上安装事件过滤器。因为一个程序只有一个QApplication对象,实现的功能和notify()函数相同,优点是可以同时处理多个事件。

(4)、重新实现event()函数。QObject类的event()函数可以在事件达到默认事件处理函数之前获得该事件。

(5)、在对象上安装事件过滤器。使用事件过滤器可以再一个界面类中同时处理不同子部件的事件。

实际编程中最常用的是方法(1),其次是方法(5)。方法2要继承QApplication类,方法3需要全局的事件过滤器,减缓事件的传递。

3、Qt事件过滤器

很多时候,我们只对某些特定的事件比较关心,例如:鼠标单击或者键盘按下等事件。其它的事件我们并不关心它是否发生,也无需对它们进行处理,这个时候最直接的想法就是将这些事件过滤掉,这样做既可以免去对它们进行处理,也可以避免它们对程序其它部分产生影响。因此,我们引入了事件过滤器这个概念。

如果对象安装了事件过滤器,则事件在到达目标对象之前先被事件过滤器截获,进行一些处理之后再交给目标对象。

实现一个事件过滤包括两个步骤:

(1)、 在目标对象上调用installEventFilter(),注册监视对象。

(2)、 在监视对象的eventFilter()函数中处理目标对象的事件。

这两步都在父窗口类中实现。

后文将结合实例进一步学习,了解事件的传递。

相关文章

  • Qt中事件的理解(1)

    1、Qt中的事件 Qt中,事件作为一个对象,继承自QEvent类,常见的有键盘事件QKeyEvent、鼠标事件QM...

  • Qt中事件的理解(2)

    这一章我们继续讲Qt事件——事件的传递 1、创建工程 工程目录如下所示: 创立工程testEvent,主窗口文件以...

  • 2020-11-20 Qt事件循环

    一 Qt事件循环:从队列中不断取出消息、处理消息的过程。 Qt会接管windows的原生窗口消息,翻译成Qt消息,...

  • 一个 Qt 事件对象的旅行

    Qt 的事件来自操作系统,Qt自己产生。当Qt应用程序运行时,qt有一个未处理的事件队列,每个事件处理周期内,将处...

  • Qt中TreeWidget拖拽事件

    “啪啪,哒哒” “咦,为何会这般,我鼠标只是敲几下并未动,你却说不让我移动呢?“ 这些日子在测试工具,工具中有用到...

  • Qt全局热键实现

    Qt 中没有实现好的跨平台全局热键,需要自己调用系统 API 来实现。 监听系统原生事件 Qt 作为跨平台的框架,...

  • CMake教程——QT项目使用CMake

    QT项目使用CMake编译QT IDE会增加一些额外的配置,我便记录下: 备注1: QT中moc的作用: Qt 将...

  • Qt开发系列3——Qt中的核心技术1

    简介 这里简单介绍Qt的一些核心机制,具体参见Qt文档。 主要包含内容: Qt的信号和槽,以及事件机制 Qt Ob...

  • Qt学习笔记(四)事件处理机制

    1、信号和槽 Qt中的事件处理机制叫“信号和槽”,signal和slot。模型:对象a中有一个信号signal:X...

  • Qt学习-(虚函数,界面原理等)

    Qt学习 事件:事件在Qt分很多种,例如鼠标,键盘,定时器,窗体大小,任何动作在GUI都可以触发某种事件, 根据C...

网友评论

      本文标题:Qt中事件的理解(1)

      本文链接:https://www.haomeiwen.com/subject/fcvkrctx.html