1
/****************************************************************************
3
** Copyright (C) 2005-2005 Trolltech AS. All rights reserved.
5
** This file is part of the example classes of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
31
#include "dragwidget.h"
33
DragWidget::DragWidget(QWidget *parent)
36
setMinimumSize(200, 200);
37
setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
40
QLabel *boatIcon = new QLabel(this);
41
boatIcon->setPixmap(QPixmap(":/images/boat.png"));
42
boatIcon->move(20, 20);
44
boatIcon->setAttribute(Qt::WA_DeleteOnClose);
46
QLabel *carIcon = new QLabel(this);
47
carIcon->setPixmap(QPixmap(":/images/car.png"));
48
carIcon->move(120, 20);
50
carIcon->setAttribute(Qt::WA_DeleteOnClose);
52
QLabel *houseIcon = new QLabel(this);
53
houseIcon->setPixmap(QPixmap(":/images/house.png"));
54
houseIcon->move(20, 120);
56
houseIcon->setAttribute(Qt::WA_DeleteOnClose);
59
void DragWidget::dragEnterEvent(QDragEnterEvent *event)
61
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
62
if (event->source() == this) {
63
event->setDropAction(Qt::MoveAction);
66
event->acceptProposedAction();
73
void DragWidget::dropEvent(QDropEvent *event)
75
if (event->mimeData()->hasFormat("application/x-dnditemdata")) {
76
QByteArray itemData = event->mimeData()->data("application/x-dnditemdata");
77
QDataStream dataStream(&itemData, QIODevice::ReadOnly);
81
dataStream >> pixmap >> offset;
83
QLabel *newIcon = new QLabel(this);
84
newIcon->setPixmap(pixmap);
85
newIcon->move(event->pos() - offset);
87
newIcon->setAttribute(Qt::WA_DeleteOnClose);
89
if (event->source() == this) {
90
event->setDropAction(Qt::MoveAction);
93
event->acceptProposedAction();
100
void DragWidget::mousePressEvent(QMouseEvent *event)
102
QLabel *child = static_cast<QLabel*>(childAt(event->pos()));
106
QPixmap pixmap = *child->pixmap();
109
QDataStream dataStream(&itemData, QIODevice::WriteOnly);
110
dataStream << pixmap << QPoint(event->pos() - child->pos());
112
QMimeData *mimeData = new QMimeData;
113
mimeData->setData("application/x-dnditemdata", itemData);
115
QDrag *drag = new QDrag(this);
116
drag->setMimeData(mimeData);
117
drag->setPixmap(pixmap);
118
drag->setHotSpot(event->pos() - child->pos());
120
QPixmap tempPixmap = pixmap;
122
painter.begin(&tempPixmap);
123
painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
126
child->setPixmap(tempPixmap);
128
if (drag->start(Qt::CopyAction | Qt::MoveAction) == Qt::MoveAction)
132
child->setPixmap(pixmap);