3

オブジェクトのドラッグをサポートする Qt Creator でカスタム ウィジェットを作成しようとしています。最も単純な形式では、ウィジェットには QRect (またはその他の形状) があり、これをクリックしてウィジェット内でドラッグできます。マウス ボタンを放すと、QRect のドラッグが停止します。

QWidget クラスには、このメソッドがあります

void ImageArea::mouseMoveEvent(QMouseEvent *event)
{
    QPoint mousePos = event->pos();

    qDebug() << mousePos.x();
    qDebug() << mousePos.y();
    qDebug() << "---------";
}

ポインターが画面上を移動すると、マウスの座標を取得できます。x と y のメンバー変数を更新してから、paintEvent メソッドを使用して QRect をペイントしようとしましたが、うまくいきません。

誰か提案はありますか?

4

3 に答える 3

2

マウス移動イベントを取得するには、 QWidget::mouseTrackingプロパティを true に設定する必要があります。

ImageArea::ImageArea( QWidget* p ) : QWidget( parent ) {
    ...
    setMouseTracking( true );
}
于 2011-04-04T06:16:23.117 に答える
0

四角形を移動するには、必ずmoveToメソッドを使用してください。x、y 位置を直接設定すると、長方形のサイズに影響する場合があります。

あなたの質問に基づいて、あなたがしていないことはわかりません。四角形をペイントするときに、四角形が新しい位置にあることを確認しますか?

Jeremy Friesner が実装するように指示した更新手順を見逃している可能性があります。

マウスボタンのトラッキングが欠落しているようです。簡単な方法は、QApplication::mouseButtons() からマウス ボタンの状態を取得することです。少し効率が悪いかもしれませんが。

于 2011-04-04T05:25:39.367 に答える
0

paintEvent(QPaintEvent *) を実装して、対応するメンバー変数の現在の値によって示される位置にオブジェクトを描画します。

1 つ以上のメンバー変数の値を (mouseMoveEvent またはどこでも) 変更した後、this->update() を呼び出します。これにより、Qt は近い将来 paintEvent メソッドを再度呼び出す必要があることがわかります。

あなたがする必要があるのはそれだけです。

于 2011-04-04T04:21:00.057 に答える