Я учу Qt для удовольствия.И у меня возник вопрос:
Как я могу перетащить QLabel в Qt между двумя разными окнами?
Вот что у меня так далеко:
![enter image description here](https://i.stack.imgur.com/xfTZj.gif)
Как вы можете сказать из .gif
(который не хочет быть загруженным и видимым здесь по некоторым причинам, но если вы нажмете на ссылку на него, вы можете ясно увидетьit) при условии, что выше прямо сейчас есть две основные проблемы:
Я не могу переместить QLabel
за пределы окна (и, следовательно, не могу зарегистрировать событие перетаскивания).
При перемещении метка по некоторым причинам мигает.
Вот соответствующая часть реализации из .gif
:
#ifndef DRAGGERP_H
#define DRAGGERP_H
#include <QLabel>
#include <QApplication>
#include <QMouseEvent>
#include <QPoint>
class DraggerP : public QLabel
{
QPoint offset;
QPoint startingPosition;
public:
DraggerP(QWidget* parent = nullptr) : QLabel(parent){ }
protected:
void enterEvent(QEvent* event) override
{
QApplication::setOverrideCursor(Qt::PointingHandCursor);
}
void leaveEvent(QEvent* event) override
{
QApplication::restoreOverrideCursor();
}
void mousePressEvent(QMouseEvent* event) override
{
startingPosition = pos();
offset = QPoint(
event->pos().x() - pos().x() + 0.5*width(),
event->pos().y() - pos().y() + 0.5*height()
);
}
void mouseMoveEvent(QMouseEvent* event) override
{
move(event->pos() + offset);
}
void mouseReleaseEvent(QMouseEvent* event) override
{
move(startingPosition);
}
};
#endif // DRAGGERP_H
Это расширение QLabel
, которое я использую для создания эффекта перетаскивания.
Мне не нужно полное решение, по крайней мере, идеякак это сделать и что я здесь делаю не так.
Здесь - довольно хороший примери я использовал это как отправную точку.