Перемещение объекта с помощью мыши

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

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

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

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

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

 LosYear24 июн. 2012 г., 15:45
Я не хочу использовать его для перетаскивания. Я просто хочу переместить объект с помощью мыши.
 Kamil Klimek23 июн. 2012 г., 23:30
Событие перемещения мыши не для "мыши что-то перетаскивает" но буквально мышь (курсор) переместилась. Вы должны поймать & quot; перетаскивание & quot; как-то. Также ev-gt; pos может относиться к виджету
 Kamil Klimek24 июн. 2012 г., 18:27
Хорошо, но вы хотите, чтобы объект следовал за курсором сам по себе или сделал его подвижным

Ответы на вопрос(1)

Решение Вопроса

Ваш подвижный виджет должен иметь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));
    }
}
 LosYear25 июн. 2012 г., 18:07
Спасибо. Это работа

Ваш ответ на вопрос