2009-08-02 11 views
4

私は簡単なペイントプログラムで作業しています。 Qt(とKDE)が簡単に実装できるように思えました。 Qtは使い方が簡単ですが、今は問題があります。Qt、マウスをスキップし、すべてのピクセルを更新しない、mouseMoveEvent()

プログラムに何かを描画すると、マウスを速く動かすとマウスがスキップします。

このような

:それは1つの長い文字列のようになりsusposed
alt text

マウスの左ボタンを押したときに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()は、描画領域であるQWidget上のQPainterを使用して、内部QImage上にピクセルを描画します。

mouseMoveEvent()は、マウスが移動するピクセルごとに呼び出されるのではなく、マウスが実際にはピクセルをスキップするだけのようです。

QtフォルトではなくX11やOSがマウスの位置/入力をどのように処理するかはわかります。

もし私がそれを修正しようとすれば、登録される2点から補間を試みるべきですか?

答えて

13

ほとんどのオペレーティングシステムでマウスが動くにつれて、マウスイベントがピクセルごとに発生することはありません。メッセージハンドラ(KDE/linuxを含む)はマウスの動きを繰り返し表示しますが、ピクセルはスキップされることがよくあります。

最後のピクセル位置を追跡し、線を引くか、最後の位置と現在の位置の間に余分なポイントを追加する必要があります。

3

右ウィンドウシステムでは、すべてのピクセルに対してマウス移動イベントが発生しません。イベントを取得するピクセル間の線を補間する必要があります。

関連する問題