qwt拖拽自定义MIME

void DragWidget::mousePressEvent(QMouseEvent *event)
{
    QListWidgetItem *currentItem = this->itemAt(event->pos());
    m_curItem = this->itemAt(event->pos());
    if (!currentItem)
        return;
    QLabel *child = new QLabel;
    child->setGeometry(event->pos().x(), event->pos().y(), 50, 80);
    if (!child)
        return;

    QIcon curIcon = currentItem->icon();
    QPixmap pix = curIcon.pixmap(50, 80);
    QByteArray itemData;
    QDataStream dataStream(&itemData, QIODevice::WriteOnly);
    dataStream << pix << QPoint(event->pos() - child->pos());
    //! [1]

    //! [2]
    QMimeData *mimeData = new QMimeData;
    mimeData->setData("application/自定义", itemData);
    mimeData->setText(currentItem->text());
    //! [2]

    //! [3]
    QDrag *drag = new QDrag(this);
    drag->setMimeData(mimeData);
    drag->setPixmap(pix);
    drag->setHotSpot(event->pos()- child->pos()+QPoint(20,20));
    //! [3]

    QPixmap tempPixmap = pix;
    QPainter painter(this->viewport());
    painter.begin(&tempPixmap);
    painter.fillRect(pix.rect(), QColor(127, 127, 127, 127));
    painter.end();

    child->setPixmap(tempPixmap);
    child->setText(currentItem->text());
    //参数1可能动作为移动或者复制,参数2建议动作为复制

    Qt::DropAction dropAction;
    dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction);

    if (dropAction == Qt::MoveAction) {
        //delete takeItem(row(currentItem));
        return;
    }
    else if (dropAction == Qt::CopyAction) {
        //delete takeItem(row(currentItem));
    }
    else
    {
        //if (drag->target())
            //delete takeItem(row(currentItem));
    }
    qDebug() << "exec action" << dropAction;
    qDebug() << "drag target " << drag->target();
        //return;
}

 

posted @ 2021-12-29 16:31  茗智溪  阅读(67)  评论(0)    收藏  举报
/* 看板娘 */