5

簡単なペイントプログラムに取り組んでいます。Qt(およびKDE)はそれを実装する簡単な方法のようでした。Qtの操作は非常に簡単ですが、問題が発生しました。

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

このように:
代替テキスト
それは1つの長い文字列のようであると思われました。

マウスの左ボタンが押されたときに、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またはOSがマウスの位置/入力を処理する方法である可能性があることを理解しています。

もしそうなら、私はそれをどのように修正しようとしますか、登録された2つのポイントから補間しようとすべきですか?

4

2 に答える 2

14

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

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

于 2009-08-02T20:55:34.660 に答える
4

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

于 2009-08-02T20:56:13.707 に答える