目的:鼠標屏幕上已有一條橫線,隨着鼠標左擊並移動,該橫線在對應的縱座標位置需隨着鼠標移動。
原圖:背景黑色,上方紅色橫線。
目的:鼠標點擊並滑動後,顯示如上。
過程:將橫線的座標存入數組中。通過mouseMoveEvent中獲取鼠標座標,通過兩次座標值對相應的橫線(數組)進行改變。鼠標滑動快,則會出現上面情形,滑動緩慢則正常。
思考:mouseMoveEvent 在兩次獲取鼠標座標中間響應時間是多少?
測試結果:響應時間:6~8ms。如果只是單純的將繪製函數放到mouseMoveEvent中,只會記錄間隔6ms的鼠標座標值,所以滑動過快,會丟失掉中間的座標值。
解決方法:
1.在mouseMoveEvent函數中,記錄兩次鼠標滑動的座標,計算(補充)兩次座標之間的座標值(線性插值);
2.在paintEvent中,第二次的座標值賦值給第一次的座標參數。(secondPoint = firstPoint)
3.在mousePressEvent中,二者相等。(secondPoint = evenevent->pos() ; firstPoint = secondPoint;)