运动目标与鼠标(Moving object with mouse)

2019-06-25 16:55发布

我使用Qt,我想移动某个对象与鼠标。 例如,用户点击对象与此对象拖动到窗口的另一个地方。 我该怎么办呢?

我试过mouseMoveEvent:

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

但不幸的是物体非常奇怪的方式。 它从地方到另一个地方跳跃。

QDropLabel继承QLabel。 此外,它给了一个象素图。 我试着用不同的对象做到这一点,但结果是一样的。

Answer 1:

Your movable widget must have a QPoint offset member. It will store a position of the cursor click relative to the widget's top left corner:

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

On mouse move event you just move your widget in its parent coordinate system. Note that if you don't subtract offset from the cursor position, your widget will 'jump' so its top left corner will be just under the cursor.

void DropLabel::mouseMoveEvent(QMouseEvent *event)
{
    if(event->buttons() & Qt::LeftButton)
    {
        this->move(mapToParent(event->pos() - offset));
    }
}


文章来源: Moving object with mouse
标签: qt drag qlabel