Qt事件处理器(一)——事件监视器

Qt事件模型是一个非常强大的功能。在事件模型中,可以通过设置监视器,监视发送给所有子部件的事件,并在监视代码中实现所需的行为。创建一个事件过滤器包括两个过程:

1.通过对目标对象调用installEventFilter()来注册监视对象。

2.在监视对象的eventFilter()函数中处理目标对象的事件。

形式:lineEdit->installEventFilter(obj);

       obj->eventFilter(QObject* watchedObj, QEvent* event);

       lineEdit->removeEventFilter(obj);

 

其中lineEdit是被监视对象,obj是监视器对象。在这个事件过滤器注册后,所有发送给lineEdit的事件,在到达之前会先被发送给obj的eventFilter()函数。

 

在eventFilter()函数里有3点需要注意:

1.当我们对事件进行完处理后,在eventFilter函数后,应该返回true,表示告知Qt已经处理完了,不必再传播出去了。如果返回false,则表示Qt将会把这个事件发送给指定的目标对象。

2.如果有多个监视器监视同一个对象,那么最后被注册的监视器的eventFilter()函数最先被激活。另外,在eventFilter函数中,如果删除了被监视对象,则必须返回true,阻止事件发送给被监视对象,否则程序会崩掉。

3.监视器和被监视对象必须在同一个线程中,如果两者不在同一个线程中,则在事件来临时,监视器不做任何事情。

posted on 2011-01-17 20:21  ActiveChange  阅读(1907)  评论(0)    收藏  举报

导航