#include <QtGui>
#include "dragwidget.h"
//! [0]
DragWidget
::DragWidget(QWidget *parent
){
setMinimumSize(200, 200);
setAcceptDrops(true);
boatIcon
->setObjectName
(QString("BOAT"));
//<---- hereboatIcon
->setPixmap
(QPixmap(":/images/boat.png"));
boatIcon->move(20, 20);
boatIcon->show();
boatIcon->setAttribute(Qt::WA_DeleteOnClose);
carIcon
->setObjectName
(QString("CAR"));
//<---- herecarIcon
->setPixmap
(QPixmap(":/images/car.png"));
carIcon->move(120, 20);
carIcon->show();
carIcon->setAttribute(Qt::WA_DeleteOnClose);
houseIcon
->setObjectName
(QString("HOUSE"));
//<---- herehouseIcon
->setPixmap
(QPixmap(":/images/house.png"));
houseIcon->move(20, 120);
houseIcon->show();
houseIcon->setAttribute(Qt::WA_DeleteOnClose);
}
//! [0]
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->acceptProposedAction();
}
} else {
event->ignore();
}
}
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->acceptProposedAction();
}
} else {
event->ignore();
}
}
{
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
QByteArray itemData
= event
->mimeData
()->data
("application/x-dnditemdata");
dataStream >> pixmap >> offset;
newIcon->setPixmap(pixmap);
newIcon->move(event->pos() - offset);
newIcon->show();
newIcon->setAttribute(Qt::WA_DeleteOnClose);
if (event->source() == this) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->acceptProposedAction();
}
} else {
event->ignore();
}
}
//! [1]
{
QLabel *child
= static_cast<QLabel
*>
(childAt
(event
->pos
()));
if (!child)
return;
qDebug("child name %s", child->objectName().toLatin1().data());
dataStream << pixmap <<
QPoint(event
->pos
() - child
->pos
());
//! [1]
//! [2]
mimeData->setData("application/x-dnditemdata", itemData);
//! [2]
//! [3]
drag->setMimeData(mimeData);
drag->setPixmap(pixmap);
drag->setHotSpot(event->pos() - child->pos());
//! [3]
painter.begin(&tempPixmap);
painter.
fillRect(pixmap.
rect(),
QColor(127,
127,
127,
127));
painter.end();
child->setPixmap(tempPixmap);
if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction) == Qt::MoveAction)
child->close();
else {
child->show();
child->setPixmap(pixmap);
}
}