#include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include 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 (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; }