mousemove事件无法直接设置触发频率,这取决于操作系统底层的响应速度。
只能采取间接的方法,如定时器的方法。但定时器太麻烦了,可以采用以下思路:
程序内定义一个计数器,每进入一次mouseMoveEvent事件计数器加1,只有到达阈值才触发一次处理代码,并将计数器清零。
代码
class myWidget:public QWidget
{
...
protected :
virtual void mouseMoveEvent(QMouseEvent *ev) override
{
// 此处进行非耗时或必须实时刷新的操作
...
sensitivity = 20;
if (delay_cnt < sensitivity)
{
delay_cnt++;
return;
}
if (delay_cnt == sensitivity) //循环计数
delay_cnt = 0;
delay_cnt++;
// 此处进行耗时操作,通过修改sensitivity来适应耗时操作所需的触发频率
//! 此处最好通过信号槽扔到子线程内执行,避免阻塞前面的非耗时操作
...
}
private:
int sensitivity; //触发灵敏度,改鼠标移动事件的触发频率,值越大频率越低
int delay_cnt; //鼠标移动事件触发计数器
}