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