Предполагая, что вы не хотите реализовывать полные операции перетаскивания, а только перемещаете положение метки с помощью мыши, вот пример:
main. cpp
#include <QLabel>
#include <QMouseEvent>
#include <QMainWindow>
#include <QApplication>
class MovableLabel : public QLabel
{
public:
MovableLabel(QWidget* parent = nullptr): QLabel(parent)
{
setAlignment(Qt::AlignCenter);
setFrameStyle(QFrame::StyledPanel | QFrame::Raised);
setLineWidth(2);
}
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
QApplication::setOverrideCursor(QCursor(Qt::ClosedHandCursor));
m_pos = event->pos();
}
}
void mouseMoveEvent(QMouseEvent *event) override
{
if (!m_pos.isNull()) {
move(mapToParent(event->pos() - m_pos));
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
m_pos = QPoint();
QApplication::restoreOverrideCursor();
}
}
private:
QPoint m_pos;
};
class MainWindow : public QMainWindow
{
public:
MainWindow(QWidget *parent = nullptr) : QMainWindow(parent)
{
resize(600,400);
auto label = new MovableLabel(this);
label->setText("Move Me!");
label->move(50, 50);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
project.pro
QT += core gui widgets
CONFIG += c++11
SOURCES += main.cpp