#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include namespace Ui { class MainWindow; } class Param { public: QString name; QString value; }; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void readFile(QString fileName); void createShape(QGraphicsItem *&target, QString name, QList list); private: Ui::MainWindow *ui; QGraphicsScene * scene; }; #endif // MAINWINDOW_H #include "mainwindow.h" #include "ui_mainwindow.h" #include #include #include #include #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); scene = new QGraphicsScene; ui->graphicsView->setScene (scene); scene->addLine (0, 0, 100, 100, QColor ("blue")); // readFile ("../xml/mainwindow.ui"); readFile ("../xml/data.xml"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::readFile (QString fileName) { QFile file (fileName); if (file.open (QFile::ReadOnly | QFile::Text )) { QTreeWidgetItem * branch = ui->treeWidget->invisibleRootItem(); QGraphicsItem * target = NULL; QXmlStreamReader reader (&file); while (! reader.atEnd()) { if (reader.isStartElement()) { QString s = reader.name().toString(); QTreeWidgetItem * item = new QTreeWidgetItem; item->setText (0, s); item->setForeground (0, QColor ("blue")); branch->addChild (item); branch = item; QList list; // for (QXmlStreamAttribute a : reader.attributes()) for (auto a : reader.attributes()) { auto node = new QTreeWidgetItem; QString t = a.name().toString() + "=" + a.value().toString(); node->setText (0, t); node->setForeground (0, QColor ("green")); item->addChild (node); Param p; p.name = a.name().toString(); p.value = a.value().toString(); list.append (p); /* list << p; */ } createShape (target, s, list); } else if (reader.isCharacters()) { QString s = reader.text().toString().simplified(); if (s != "") { QTreeWidgetItem * item = new QTreeWidgetItem; item->setText (0, s); item->setForeground (0, QColor ("orange")); branch->addChild (item); } } else if (reader.isEndElement()) { branch = branch->parent(); } reader.readNext(); } ui->treeWidget->expandAll(); } } void MainWindow::createShape (QGraphicsItem * & target, QString name, QList list) { QGraphicsRectItem * shape = NULL; if (name == "rectangle") shape = new QGraphicsRectItem; else if (name == "ellipse") shape = new QGraphicsRectItem; if (shape != NULL) { shape->setRect(10, 10, 100, 40); shape->setFlag (QGraphicsItem::ItemIsMovable); for (Param p : list) if (p.name == "pen") shape->setPen (QColor (p.value)); else if (p.name == "brush") shape->setBrush (QColor (p.value)); if (target == NULL) scene->addItem (shape); else shape->setParentItem (target); } }