|  | Home · All Classes · Main Classes · Grouped Classes · Modules · Functions |

# droparea.cpp Example File
draganddrop/dropsite/droparea.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2005-2006 Trolltech ASA. All rights reserved.
        **
        ** This file is part of the example classes of the Qt Toolkit.
        **
        ** Licensees holding valid Qt Preview licenses may use this file in
        ** accordance with the Qt Preview License Agreement provided with the
        ** Software.
        **
        ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
        ** information about Qt Commercial License Agreements.
        **
        ** Contact info@trolltech.com if any conditions of this licensing are
        ** not clear to you.
        **
        ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
        ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
        **
        ****************************************************************************/

        #include <QtGui>

        #include "droparea.h"

        DropArea::DropArea(QWidget *parent)
            : QLabel(parent)
        {
            setMinimumSize(200, 200);
            setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
            setAlignment(Qt::AlignCenter);
            setAcceptDrops(true);
            setAutoFillBackground(true);
            clear();
        }

        void DropArea::dragEnterEvent(QDragEnterEvent *event)
        {
            setText(tr("<drop content>"));
            setBackgroundRole(QPalette::Highlight);

            event->acceptProposedAction();
            emit changed(event->mimeData());
        }

        void DropArea::dropEvent(QDropEvent *event)
        {
            const QMimeData *mimeData = event->mimeData();

            if (mimeData->hasImage()) {
                setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));
            } else if (mimeData->hasHtml()) {
                setText(mimeData->html());
                setTextFormat(Qt::RichText);
            } else if (mimeData->hasText()) {
                setText(mimeData->text());
                setTextFormat(Qt::PlainText);
            } else {
                setText(tr("Cannot display data"));
            }

            setBackgroundRole(QPalette::Dark);
            event->acceptProposedAction();
        }

        void DropArea::dragLeaveEvent(QDragLeaveEvent *event)
        {
            clear();
            event->accept();
        }

        void DropArea::clear()
        {
            setText(tr("<drop content>"));
            setBackgroundRole(QPalette::Dark);

            emit changed();
        }

        QPixmap DropArea::extractPixmap(const QByteArray &data, const QString &format)
        {
            QList<QByteArray> imageFormats = QImageReader::supportedImageFormats();
            QPixmap pixmap;

            foreach (QByteArray imageFormat, imageFormats) {
                if (format.mid(6) == QString(imageFormat)) {
                    pixmap.loadFromData(data, imageFormat);
                    break;
                }
            }
            return pixmap;
        }