Qt_GUI_IM_5_2 - 8BitsCoding/RobotMentor GitHub Wiki

목차

배울내용에 대한 Overview이다.


Drag initiation

QDrag * drag = new QDrag(this);
QMimeData *  mineData = new QMineData;

mineData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);

Drag event methods

void dragEnterEvent(QDragEnterEvent* event) override;
void dragMoveEvent(QDragMoveEvent* event) override;
void dragLeaveEvent(QDragLeaveEvent* event) override;
void dropEvent(QDropEvent* event) override;

Package Data

QByteArray itemData;
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
dataStream << pixmap << QPoint(event->pos() - child->pos());

QMimeData * mimeData = new QMimeData;
mimeData->setData("application/x-qtcustomitem", itemData);


Prepare data for transfer

QDrag * drag = new QDrag(this);
drag->setMimeData(mimeData);
drag->setPixmap(pixmap);


Fire off the drag object

if(drag->exec(Qt::CopyAction | Qt::MoveAction,
            Qt::CopyAction)==Qt::MoveAction) {
    // Moving
    // Get rid of the original object
} else
{
    // Copying
    // Keep original copy intact
}

Act on sent drag object in receiving widget

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();
    }
    }
}

Subclass QMimeData

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;
};
⚠️ **GitHub.com Fallback** ⚠️