Qt 用鼠标移动物体

Qt 用鼠标移动物体,qt,drag,qlabel,Qt,Drag,Qlabel,我使用Qt,我想用鼠标移动一些对象。例如,用户单击对象并将该对象拖动到窗口的另一个位置。我怎么能做到 我试过mouseMoveEvent: void QDropLabel::mouseMoveEvent(QMouseEvent *ev) { this->move(ev->pos()); } 但不幸的是,物体的运动方式非常奇怪。它从一个地方跳到另一个地方 QDropLabel继承QLabel。它还提供了一个pixmap。 我尝试用不同的对象来实现,但结果是一样的。您的可移动小

我使用Qt,我想用鼠标移动一些对象。例如,用户单击对象并将该对象拖动到窗口的另一个位置。我怎么能做到

我试过mouseMoveEvent:

void QDropLabel::mouseMoveEvent(QMouseEvent *ev)
{
    this->move(ev->pos());
}
但不幸的是,物体的运动方式非常奇怪。它从一个地方跳到另一个地方

QDropLabel继承QLabel。它还提供了一个pixmap。
我尝试用不同的对象来实现,但结果是一样的。

您的可移动小部件必须有
QPoint offset
成员。它将存储光标单击相对于小部件左上角的位置:

void DropLabel::mousePressEvent(QMouseEvent *event)
{
    offset = event->pos();
}
在鼠标移动事件中,您只需在其父坐标系中移动小部件。请注意,如果不从光标位置减去偏移量,小部件将“跳转”,因此其左上角将正好位于光标下方

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

鼠标移动事件不是指“鼠标正在拖动某物”,而是指鼠标(光标)移动。你必须设法抓住“拖拉”。此外,ev->pos可能与widgetI有关,我不想将其用于拖放。我只想用鼠标移动对象。好的,但你们想让对象跟随光标,或者让它可以移动