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

# coloritem.cpp Example File
graphicsview/dragdroprobot/coloritem.cpp

        /****************************************************************************
        **
        ** Copyright (C) 2006-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 "coloritem.h"

        ColorItem::ColorItem()
            : color(rand() % 256, rand() % 256, rand() % 256)
        {
            setToolTip(QString("QColor(%1, %2, %3)\n%4")
                       .arg(color.red()).arg(color.green()).arg(color.blue())
                       .arg("Click and drag this color onto the robot!"));
            setCursor(Qt::OpenHandCursor);
        }

        QRectF ColorItem::boundingRect() const
        {
            return QRectF(-15.5, -15.5, 34, 34);
        }

        void ColorItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
        {
            Q_UNUSED(option);
            Q_UNUSED(widget);
            painter->setPen(Qt::NoPen);
            painter->setBrush(Qt::darkGray);
            painter->drawEllipse(-12, -12, 30, 30);
            painter->setPen(QPen(Qt::black, 1));
            painter->setBrush(QBrush(color));
            painter->drawEllipse(-15, -15, 30, 30);
        }

        void ColorItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
        {
            if (event->button() != Qt::LeftButton) {
                event->ignore();
                return;
            }

            QDrag *drag = new QDrag(event->widget());
            QMimeData *mime = new QMimeData;
            drag->setMimeData(mime);

            static int n = 0;
            if (n++ > 2 && (rand() % 3) == 0) {
                QImage image(":/images/head.png");
                mime->setImageData(image);

                drag->setPixmap(QPixmap::fromImage(image).scaled(30, 40));
                drag->setHotSpot(QPoint(30, 40));
            } else {
                mime->setColorData(color);
                mime->setText(QString("#%1%2%3")
                              .arg(color.red(), 2, 16, QLatin1Char('0'))
                              .arg(color.green(), 2, 16, QLatin1Char('0'))
                              .arg(color.blue(), 2, 16, QLatin1Char('0')));

                QPixmap pixmap(34, 34);
                pixmap.fill(Qt::transparent);
                QPainter painter(&pixmap);
                painter.translate(15, 15);
                painter.setRenderHint(QPainter::Antialiasing);
                paint(&painter, 0, 0);
                painter.end();

                drag->setPixmap(pixmap);
                drag->setHotSpot(QPoint(15, 20));
            }

            drag->start();
        }