2009-08-02 61 views
4

我在一個簡單的繪圖程序上工作。 看來Qt(和KDE)是實現它的一個簡單方法。 我覺得Qt很容易處理,但現在我遇到了問題。Qt,鼠標跳過,沒有更新每個像素,mouseMoveEvent()

當我在程序中繪製某些東西時,如果我將鼠標移動到快速,則鼠標將跳過。

這樣的:
alt text
它susposed是像一個長字符串。

當鼠標左鍵被按下時,我使用mouseMoveEvent()繪製一個像素到我的圖像。 我叫setMouseTracking(true);所以只要我移動鼠標就應該調用事件。

void camoMaker::mouseMoveEvent(QMouseEvent *ev) 
{ 
    if(ev->state()==Qt::LeftButton) 
    { 
     QPoint mPoint=ev->pos(); 
     mPoint.setX(mPoint.x()-80); 
     drawPoint(mPoint); 
    } 
} 

camoMaker是主要的部件。
drawPoint()在內部QImage上繪製像素,並在繪製區域的QWidget上使用QPainter。

在我看來,鼠標移動的每個像素都不會調用mouseMoveEvent(),或者鼠標實際上只是跳過某個像素。

我明白,它可能只是如何工作,而不是Qt故障,但X11或操作系統如何處理鼠標位置/輸入。

如果是這樣,我該如何解決它,我應該嘗試插入2點獲得註冊?

回答

13

在大多數操作系統上,隨着鼠標移動,鼠標事件不會發生在每個像素上。消息處理程序(包括KDE/linux)反覆顯示鼠標移動,但像素通常會被跳過。

您需要跟蹤最後一個像素位置,然後繪製一條直線,或者在最後一個位置和當前位置之間添加額外的點。

3

你是對的 - 窗口系統不會爲每個像素提供鼠標移動事件。您需要在獲取事件的像素之間插入一條線。