Qt|控件的事件过滤使用与总结
在 Qt 的事件模型中,提供了一种事件过滤器功能。可以使一个 Object 对象监视另一个 OBject 对象中的事件。通过在一个 QObject 对象中安装时间过滤器,可以在事件到某个对象前捕获时间,从而起到了监视该对象的作用。
在这里,我们使用 QLabel 控件来说明,该控件是一个静态控件,只能用于展示图片、文本。无法响应鼠标按下、弹起甚至是移动等事件。那么我们就需要采用事件过滤器来进行处理,在使用 QLabel 控件的 QWidget 窗口中进行监视。
接下来的例子就是以 QLabel 响应鼠标按下消息为例。
第一步:重载监视函数
复制代码
其中,eventFillter()函数是 QObject 的事件监视函数。
第二步:对需要安装监视的控件安装事件过滤器
复制代码
其中,intallEventFilter()函数为每一个控件安装事件过滤器,指定整个窗体作为监视事件的对象
函数原型,如下:
复制代码
参数是监视事件的对象,该对象可以通过 eventFilter()函数接收事件。
某个事件需要被过滤,停止正常的事件响应,eventFilter 返回值为 True,否则返回值为 False。
如果在使用过程中,不需要再监视该控件时,需要移动监视
复制代码
第三步:事件监视器具体实现监视
判断当前发生事件的对象
复制代码
判断该对象的事件类型
复制代码
到这里,就可以准确的查找出鼠标此时点击的是 QLabel 控件,可以在注释位置添加对应的实际代码操作。
假设,需要将事件 event 转换为鼠标事件
复制代码
评论