Qt事件过滤了解一下
事件是Qt中很重要的一部分。比如绘制需要绘制事件,鼠标点击有鼠标按下事件和鼠标弹起事件。那么事件过滤又是什么呢?我觉得把它叫作事件拦截会更好理解一些。所谓事件过滤就是在一个对象收到事件之前先对它的事件进行处理。
举个例子:
在Widget上放置一个按钮,点击按钮会弹出一个提示。因为按钮获取了鼠标的按下事件。关键代码如下:
程序运行效果:点击按钮触发了sltBtnClicked槽函数
现在给按钮添加一个事件过滤器,把它的鼠标按下事件和鼠标双击事件过滤掉。具体操作:
1.给按钮安装一个事件过滤器(Widget)
2.重写过滤器的eventFilter函数,在该函数中过滤按钮的那两个事件。
运行效果:
点击按钮没反应,说明事件被过滤了。
总结事件过滤器的用法:对象1设置事件过滤器为对象2 -> 重写对象2的eventFilter函数,在该函数中处理对象1的事件 -> 返回true则对应的事件就不继续传递给对象1,反之则会继续传递。