Вопрос по qt, drag, qlabel – Перемещение объекта с помощью мыши

5

Я использую Qt и хочу переместить какой-нибудь объект мышью. Например, пользователь нажимает на объект и перетаскивает этот объект в другое место окна. Как я могу это сделать?

Я попробовал mouseMoveEvent:

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

но, к сожалению, объект движется очень странным образом. Он прыгает с места на место.

QDropLabel наследует QLabel. Также он дал растровое изображение. Я пытался сделать это с разными объектами, но результат тот же.

Я не хочу использовать его для перетаскивания. Я просто хочу переместить объект с помощью мыши. LosYear
Событие перемещения мыши не для "мыши что-то перетаскивает" но буквально мышь (курсор) переместилась. Вы должны поймать & quot; перетаскивание & quot; как-то. Также ev-gt; pos может относиться к виджету Kamil Klimek
Хорошо, но вы хотите, чтобы объект следовал за курсором сам по себе или сделал его подвижным Kamil Klimek

Ваш Ответ

1   ответ
18

Ваш подвижный виджет должен иметь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));
    }
}
Спасибо. Это работа LosYear

Похожие вопросы