Qt_GUI_IM_5_2 - 8BitsCoding/RobotMentor GitHub Wiki
배울내용에 대한 Overview이다.
- Drag initiation
- Drag event methods
- Package Data
- Prepare data for transfer
- Fire off the drag object
- Act on sent drag object in receiving widget
- Subclass QMimeData
QDrag * drag = new QDrag(this);
QMimeData * mineData = new QMineData;
mineData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);
void dragEnterEvent(QDragEnterEvent* event) override;
void dragMoveEvent(QDragMoveEvent* event) override;
void dragLeaveEvent(QDragLeaveEvent* event) override;
void dropEvent(QDropEvent* event) override;
QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << pixmap << QPoint(event->pos() - child->pos());
QMimeData * mimeData = new QMimeData;
mimeData->setData("application/x-qtcustomitem", itemData);
QDrag * drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setPixmap(pixmap);
if(drag->exec(Qt::CopyAction | Qt::MoveAction,
Qt::CopyAction)==Qt::MoveAction) {
// Moving
// Get rid of the original object
} else
{
// Copying
// Keep original copy intact
}
void Containter::dragEnterEvent(QDragEnterEvent* event)
{
qDebug() << "Possible action : " << event->possibleActions();
if(event->mimeData()->hasFormat("application/x-qtcustomitem")) {
if(event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
// or
// event->ignore();
} else {
event->acceptProposedAcion();
}
} else {
event->ignore();
}
}
}
class PixmapMime : public QMimeData
{
Q_OBJECT
public:
explicit PixmapMime(QPixmap pix, QPoint offset, QString description);
QPixmap pix() const;
QPoint offset() const;
public:
QStringList formats() const override;
protected:
QVariant retrieveData(const QString& mimetype, QVariant::Type preferredType) const override;
private:
QPixmap mPix;
QPoint mOffset;
QStringList mimeMormats;
QString description;
};