QT 事件的传递先后顺序 您所在的位置:网站首页 qt图层顺序 QT 事件的传递先后顺序

QT 事件的传递先后顺序

2024-06-02 03:40| 来源: 网络整理| 查看: 265

目录

 一、Qt提供5个级别的事件处理和过滤 (从后到先):

1、重新实现事件函数。

2、重新实现QObject::event().

3、安装事件过滤器

4、在 QApplication 上安装事件过滤器。

5、重新实现QApplication 的 notify()方法.

二、event 与 Even Filter

1. event() 简介

2. event 返回值的作用

3. 事件过滤器(Even Filter)

 一、Qt提供5个级别的事件处理和过滤 (从后到先): 1、重新实现事件函数。

比如: mousePressEvent(), keyPressEvent(),   paintEvent() 。

这是最常规的事件处理方法。

2、重新实现QObject::event().

这一般用在Qt没有提供该事件的处理函数时。也就是,我们增加新的事件时。

 

3、安装事件过滤器

installEventFilter()     --      bool eventFilter(QObject *target, QEvent *event)

 

4、在 QApplication 上安装事件过滤器。

这之所以被单独列出来是因为: QApplication 上的事件过滤器将捕获应用程序的所有事件,而且***个获得该事件。也就是说事件在发送给其它任何一个event filter之前发送给QApplication的event filter。

 

5、重新实现QApplication 的 notify()方法.

Qt使用 notify()来分发事件。要想在任何事件处理器捕获事件之前捕获事件,***的方法就是重新实现QApplication 的 notify()方法。

二、event 与 Even Filter 1. event() 简介

event 函数的作用就在于 事件的分发,在 even filter 之后执行

bool myWidget::event(QEvent *e) { if (e->type() == QEvent::KeyPress) { //将QEvent对象转换为真正的QKeyEvent对象 QKeyEvent *keyEvent = static_cast(e); if (keyEvent->key() == Qt::Key_Tab) { qDebug() type() == QEvent::KeyPress) { //将QEvent对象转换为真正的QKeyEvent对象 QKeyEvent *keyEvent = static_cast(e); if (keyEvent->key() == Qt::Key_Tab) { qDebug() installEventFilter(this); } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (obj == textEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); qDebug()


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有