6

Qtを使用していて、マウスでオブジェクトを移動したいと思います。たとえば、ユーザーがオブジェクトをクリックして、このオブジェクトをウィンドウの別の場所にドラッグします。どうすればいいですか?

mouseMoveEventを試しました:

void QDropLabel::mouseMoveEvent(QMouseEvent *ev)
{
    this->move(ev->pos());
}

しかし、残念ながら、オブジェクトは非常に奇妙な方法で移動します。それは場所から場所へとジャンプします。

QDropLabelはQLabelを継承します。また、それはピックスマップを与えました。別のオブジェクトで試してみましたが、結果は同じです。

4

1 に答える 1

20

可動ウィジェットにはQPoint offsetメンバーが必要です。ウィジェットの左上隅に対するカーソル クリックの位置を保存します。

void DropLabel::mousePressEvent(QMouseEvent *event)
{
    offset = event->pos();
}

マウス移動イベントでは、親座標系でウィジェットを移動するだけです。カーソル位置から差し引かないoffsetと、ウィジェットが「ジャンプ」するため、左上隅がカーソルのすぐ下になることに注意してください。

void DropLabel::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)
    {
        this->move(mapToParent(event->pos() - offset));
    }
}
于 2012-06-25T07:20:51.890 に答える