39-Qt 中的事件处理(下)

1. QT中的事件传递

  • 事件传递的过程

在这里插入图片描述

  • QEvent 中的关键成员函数

    void ignore();  // 接收者忽略当前事件,事件可能传递给父组件
    void accept();  // 接收者期望处理当前事件
    bool isAccepted();  // 判断当前事件是否被处理
    
  • 事件传递实战

1. QT中的事件过滤器

  • QT 中的事件过滤器

    • 事件过滤器可以对其它组件接收到的事件进行监控
    • 任意的 QObject 对象都可以作为事件过滤器使用
    • 事件过滤器对象需要重写 eventFilter() 函数
  • 组件通过 installEventFilter() 函数安装事件过滤器

    • 事件过滤器在组件之前接收到事件

    • 事件过滤器能够决定是否将事件转发到组件对象

在这里插入图片描述

  • 事件过滤器的使用方式

    // 返回 true 表示事件已经处理过,无需传递给 ogj
    // 返回 false 则正常传递到 ogj
    bool Widget::eventFilter(QObject* obj,QEvent* e)
    {
    	if( /* 根据 obj 判断对象 */)
    	{
    		if( /* 根据 e->type() 判断事件  */ )
    		{
    			/* 事件处理逻辑 */
    		}
    	}
    	
    	/* 调用父类同名函数 */
    	return QWidget::eventFilter(obj,e);
    }
    
  • 事件过滤器实战

3. 总结

  • QT 应用程序由严格的事件处理顺序
  • QT 事件在处理后可能传递给父组件对象
  • 可以通过 installEventFilter() 函数安装事件过滤器
  • 事件过滤器可以对其它组件接收到的事件进行监控
  • 事件过滤器能够决定是否将事件转发到组件对象
发布了73 篇原创文章 · 获赞 31 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_40794602/article/details/105744336