#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QGraphicsRectItem>
#include <QGraphicsSceneWheelEvent>
#include <QDrag>
#include <QMimeData>
#include <QGraphicsSceneDragDropEvent>
QMainWindow * win = NULL;
 
class MyItem : public QGraphicsRectItem
{
private:
    int cnt = 0;
    QColor clr;
protected:
    virtual void wheelEvent ( QGraphicsSceneWheelEvent * event )
    {
        cnt += event->delta() / 8;
        clr = QColor::fromHsl(abs (cnt)%360, 250, 200);
        setBrush (clr);
        setToolTip(QString::number(cnt));
    }
    virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event )
    {
        QDrag * d = new QDrag (win);
        QMimeData * m = new QMimeData;
        m->setText("hello");
        m->setColorData(clr);
        d->setMimeData (m);
        d->exec();
    }
    virtual void dropEvent ( QGraphicsSceneDragDropEvent * event )
    {
        const QMimeData * m = event->mimeData();
        setBrush (qvariant_cast<QColor> (m->colorData()));
        setToolTip(m->text());
    }
public:
    MyItem ()
    {
       setPen (QColor ("red"));
       clr = QColor ("cornflowerblue");
       setBrush (clr);
       setOpacity (0.5);
       setFlag (QGraphicsItem::ItemIsMovable);
       setFlag (QGraphicsItem::ItemIsSelectable);
       setAcceptDrops (true);
    }
};
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    win = this;
 
    QGraphicsScene * scene = new QGraphicsScene;
    scene->setSceneRect(0, 0, 800, 600);
    ui->graphicsView->setScene (scene);
 
    scene->addText("Hello");
    scene->addLine(0, 0, 100, 100, QColor("red"));
 
    for (int i = 1; i <= 3; i++)
    {
       QGraphicsRectItem * item = new MyItem;
       item->setRect (50*i, 50*i, 100, 200);
       scene->addItem (item);
    }
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
qtgraphics.txt · Last modified: 2014/03/17 17:01 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki