File myitem.h
#ifndef MYITEM_H
#define MYITEM_H
#include
class MyItem
{
public:
virtual QString info ();
};
#endif // MYITEM_H
File myitem.cpp
#include "myitem.h"
QString MyItem::info ()
{
return "my item";
}
File myrectangle.h
#include "myitem.h"
... , public MyItem
#ifndef MYRECTANGLE_H
#define MYRECTANGLE_H
#include
#include "myitem.h"
class MyRectangle : public QGraphicsRectItem, public MyItem
{
public:
virtual QString info ();
};
#endif // MYRECTANGLE_H
File myrectangle.cpp
#include "myrectangle.h"
QString MyRectangle::info ()
{
return "my rectangle " +
QString::number ( rect().x() ) + "," +
QString::number ( rect().y() ) + " " +
QString::number ( rect().width() ) + " x " +
QString::number ( rect().height() );
}
File myellipse.h
#include "myitem.h"
... , public MyItem
#ifndef MYELLIPSE_H
#define MYELLIPSE_H
#include
#include "myitem.h"
class MyEllipse : public QGraphicsRectItem, public MyItem
{
public:
virtual QString info ();
};
#endif // MYELLIPSE_H
File myellipse.cpp
#include "myellipse.h"
QString MyEllipse::info ()
{
return "my ellipse " +
QString::number ( rect().x() ) + "," +
QString::number ( rect().y() ) + " " +
QString::number ( rect().width() ) + " x " +
QString::number ( rect().height() );
}
File mywindow.cpp
#include "myrectangle.h"
#include "myellipse.h"
upravit ve funkci setup
MyRectangle * r = new MyRectangle;
MyEllipse * e = new MyEllipse;
pridat do funkce showBranch
MyItem * m = dynamic_cast < MyItem * > (item);
if (m != NULL)
s = m->info ();
a cely soubor
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
#include "myrectangle.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setup ();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::setup ()
{
QGraphicsScene * scene = new QGraphicsScene ();
ui->graphicsView->setScene (scene);
scene->addLine(10, 10, 100, 100);
scene->addRect(100, 10, 20, 20);
scene->addEllipse(140, 20, 40, 70);
MyRectangle * r = new MyRectangle;
r->setPen(QColor ("red"));
r->setBrush(QColor ("yellow"));
r->setRect (100, 100, 100, 100);
r->setFlags(QGraphicsItem::ItemIsMovable);
scene->addItem (r);
for (int i = 1; i <= 2; i++)
{
QGraphicsEllipseItem * e = new QGraphicsEllipseItem;
e->setPen(QColor ("orange"));
e->setBrush(QColor ("green"));
e->setParentItem (r);
e->setRect (70 + 40*i, 120, 20, 20);
}
showScene (scene);
}
void MainWindow::showScene (QGraphicsScene * scene)
{
QList < QGraphicsItem * > list = scene->items ();
int cnt = list.count ();
for (int i = 0 ; i < cnt; i++)
{
QGraphicsItem * p = list.value (i);
if (p->parentItem() == NULL)
showBranch (NULL, p);
}
}
void MainWindow::showBranch (QTreeWidgetItem * above, QGraphicsItem * item)
{
QTreeWidgetItem * t = new QTreeWidgetItem;
QString s = "something";
QGraphicsRectItem * r = dynamic_cast < QGraphicsRectItem * > (item);
if (r != NULL)
s = "rectangle " + QString::number ( r->rect().x() ) +
", " + QString::number ( r->rect().y() );
MyRectangle * m = dynamic_cast < MyRectangle * > (item);
if (m != NULL)
s = m->info ();
t->setText (0, s);
if (above == NULL)
ui->treeWidget->addTopLevelItem(t);
else
above->addChild (t);
QList < QGraphicsItem * > list = item->childItems();
int cnt = list.count ();
for (int i = 0 ; i < cnt; i++)
showBranch (t, list[i]);
}