Qt事件过滤了解一下


事件是Qt中很重要的一部分。比如绘制需要绘制事件,鼠标点击有鼠标按下事件和鼠标弹起事件。那么事件过滤又是什么呢?我觉得把它叫作事件拦截会更好理解一些。所谓事件过滤就是在一个对象收到事件之前先对它的事件进行处理。


举个例子:

在Widget上放置一个按钮,点击按钮会弹出一个提示。因为按钮获取了鼠标的按下事件。关键代码如下:

image.png

程序运行效果:点击按钮触发了sltBtnClicked槽函数

image.png



现在给按钮添加一个事件过滤器,把它的鼠标按下事件和鼠标双击事件过滤掉。具体操作:
1.给按钮安装一个事件过滤器(Widget)

image.png


2.重写过滤器的eventFilter函数,在该函数中过滤按钮的那两个事件。

image.png

运行效果:

image.png

点击按钮没反应,说明事件被过滤了。


总结事件过滤器的用法:对象1设置事件过滤器为对象2 -> 重写对象2的eventFilter函数,在该函数中处理对象1的事件 -> 返回true则对应的事件就不继续传递给对象1,反之则会继续传递。


演示站
上一篇:Qt提示c2015:常量中的字符太多
下一篇:QTableWidget 插入数据不显示?

发表评论