void MainWindow::on_actionLoad_XML_triggered() { scene->clear(); graph.clear(); QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "", "Files (*.xml)", NULL); CFG cfg = parser.getCFG(fileName); // add all blocks for(Block block : cfg.getBlocks()) { Node* node = new Node(block.getName(), 50, 50); node->setX(qrand() % ((500 + 1) - (-500)) + (-500)); node->setY(qrand() % ((500 + 1) - (-500)) + (-500)); scene->addItem(node); graph.addNode(node); } // add all edges for(Block block : cfg.getBlocks()) { AbstractNode* from = graph.getNode(block.getName()); for(QString succName : block.getSuccessors()) { AbstractNode* to = graph.getNode(succName); EdgeItem* edge = new EdgeItem(from,to,true); edge->adjust(); scene->addItem(edge); graph.addEdge(from,to,edge); } } graph.setStart(graph.getNode(cfg.getStart().getName())); }
QVariant NodeItem::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant& value) { if (change == QGraphicsItem::ItemPositionHasChanged) { QListIterator<EdgeItem*> i(m_edges); while (i.hasNext()) { EdgeItem* edge = i.next(); edge->adjust(); } } return QGraphicsItem::itemChange(change, value); }