目的:鼠标屏幕上已有一条横线,随着鼠标左击并移动,该横线在对应的纵坐标位置需随着鼠标移动。
原图:背景黑色,上方红色横线。
目的:鼠标点击并滑动后,显示如上。
过程:将横线的坐标存入数组中。通过mouseMoveEvent中获取鼠标坐标,通过两次坐标值对相应的横线(数组)进行改变。鼠标滑动快,则会出现上面情形,滑动缓慢则正常。
思考:mouseMoveEvent 在两次获取鼠标坐标中间响应时间是多少?
测试结果:响应时间:6~8ms。如果只是单纯的将绘制函数放到mouseMoveEvent中,只会记录间隔6ms的鼠标坐标值,所以滑动过快,会丢失掉中间的坐标值。
解决方法:
1.在mouseMoveEvent函数中,记录两次鼠标滑动的坐标,计算(补充)两次坐标之间的坐标值(线性插值);
2.在paintEvent中,第二次的坐标值赋值给第一次的坐标参数。(secondPoint = firstPoint)
3.在mousePressEvent中,二者相等。(secondPoint = evenevent->pos() ; firstPoint = secondPoint;)