鼠標滑動畫線——paintEvent mouseMoveEvent兩次響應間隔時間

目的:鼠標屏幕上已有一條橫線,隨着鼠標左擊並移動,該橫線在對應的縱座標位置需隨着鼠標移動。

 

原圖:背景黑色,上方紅色橫線。

目的:鼠標點擊並滑動後,顯示如上。

過程:將橫線的座標存入數組中。通過mouseMoveEvent中獲取鼠標座標,通過兩次座標值對相應的橫線(數組)進行改變。鼠標滑動快,則會出現上面情形,滑動緩慢則正常。

思考:mouseMoveEvent 在兩次獲取鼠標座標中間響應時間是多少?

測試結果:響應時間:6~8ms。如果只是單純的將繪製函數放到mouseMoveEvent中,只會記錄間隔6ms的鼠標座標值,所以滑動過快,會丟失掉中間的座標值。

解決方法:

1.在mouseMoveEvent函數中,記錄兩次鼠標滑動的座標,計算(補充)兩次座標之間的座標值(線性插值);

2.在paintEvent中,第二次的座標值賦值給第一次的座標參數。(secondPoint = firstPoint)

3.在mousePressEvent中,二者相等。(secondPoint = evenevent->pos()  ; firstPoint = secondPoint;)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章