Qt程序中,如果我们需要对一个widget的多个事件进行自定义的响应,通常的方法就是重写QWidget的event事件,重写这个事件的时候要特别小心,
因为一个widget随时随地都有很多事件需要处理,就是说event这个函数被调用的次数是非常频繁的,对event的重写一不小心就会严重影响程序性能,比如LZ就遇到过这样一个问题,
我需要对一个widget的很多鼠标事件,如进入、离开、移动、按下这些进行处理从而绘制不同的显示特效,我使用了一个switch来判断事件类型
switch (e->type)
{
case QEvent::MouseButtonPress:
…
break;
case QEvent::MouseButtonRelease:
…
break;
case …
break;
default:
break;
}
update();
return QWidget::event(e);
在每个case中,我均设置了不同的绘制时数据,在switch外面我调用了一个update,程序运行时CPU占用率一直居高不下,后来才意识到这个update放错了位置,因为这样放的话每次event调用都会
去重绘一次,正确的方式是把update函数放到每个case语句中,这样对于不感兴趣的事件我就不用去update了