[[qtgraph2]]
 
 
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QGraphicsRectItem>
#include <QGraphicsSceneWheelEvent>
#include <QGraphicsSceneDragDropEvent>
 
#include <QDrag>
#include <QMimeData>
 
MainWindow * win = 0;
 
class MyItem : public QGraphicsRectItem
{
private:
    QColor clr;
    int cnt;
public:
    void setClr ()
    {
        clr = QColor::fromHsl(abs (cnt) % 360, 250, 150);
        setBrush (clr);
        setToolTip (QString::number(cnt));
        // setRotation(abs (cnt) % 360);
    }
 
    MyItem (int p = 0) :
       cnt (p)
    {
        setClr ();
        setPen (QColor ("red"));
        setOpacity (0.5);
        setFlag (QGraphicsItem::ItemIsMovable);
        setAcceptDrops (true);
    }
protected:
    virtual void wheelEvent ( QGraphicsSceneWheelEvent * event )
    {
        cnt += event->delta() / 8;
        setClr ();
        // setBrush (Qt::green);
    }
    /*
    virtual void mousePressEvent ( QGraphicsSceneMouseEvent * event )
    {
        // #include <QDrag>
        // #include <QMimeData>
        QDrag * d = new QDrag (win);
        QMimeData * m = new QMimeData;
        m->setText ("abc");
        m->setColorData (clr);
        d->setMimeData (m);
        d->exec ();
    }
    virtual void dropEvent ( QGraphicsSceneDragDropEvent * event )
    {
        setBrush (Qt::green);
        const QMimeData * m = event->mimeData();
        if (m->hasText())
            setToolTip(m->text());
        if (m->hasColor())
            setBrush (qvariant_cast<QColor>(m->colorData()));
    }
    */
 
};
 
class MyPort : public QGraphicsRectItem
{
public:
    MyPort ()
    {
        setPen (QColor ("blue"));
        setBrush (QColor ("yellow"));
        setFlag (QGraphicsItem::ItemIsMovable);
        setRect (0, 0, 10, 10);
    }
 
};
 
class MyConn : public QGraphicsLineItem
{
public:
    MyPort * from;
    MyPort * to;
    MyConn () : from (NULL), to (NULL)
    {
        setPen (QPen (QColor ("red"), 3));
    }
    void updateConn ()
    {
        QPointF a = from->mapToScene (from->pos ());
        QPointF b = to->mapToScene (to->pos ());
        setLine(a.x(), a.y(), b.x(), b.y());
 
    }
};
 
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    win = this;
 
    QGraphicsScene * scene = new QGraphicsScene;
    scene->setSceneRect (0, 0, 300, 200);
    ui->graphicsView->setScene (scene);
 
    MyItem * tab [5];
    for (int i = 1; i <= 5; i++)
    {
 
        MyItem * item = new MyItem (45*i);
        item->setRect (0, 0, 100, 200);
        item->setPos (80*i, 40*i);
        scene->addItem (item);
        tab[i-1] = item;
    }
 
    MyPort * port [2];
    for (int i = 0; i <= 1; i++)
    {
        MyPort * p = new MyPort;
        port[i] = p;
        p->setParentItem (tab[i]); 
        p->setPos (5, 5);
    }
 
    /*
    scene->addText ("Hello");
    scene->addLine (0, 0, 100, 100, QColor ("red"));
    scene->addRect (100, 10, 40, 40, QColor ("blue"), QColor ("yellow"));
 
    QGraphicsRectItem * item = new QGraphicsRectItem;
    item->setPen (QPen (QColor ("blue"), 3));
    item->setBrush (QBrush(QColor ("cornflowerblue"), Qt::FDiagPattern));
    item->setRect (40, 40, 100, 200);
    item->setToolTip ("abc");
    item->setFlags(QGraphicsItem::ItemIsMovable);
    // item->setFlags(QGraphicsItem::ItemIsSelectable);
    scene->addItem (item);
    */
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
qtgraph2.txt · Last modified: 2014/03/25 10:43 by 147.32.8.115
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki