コード例 #1
0
void NetworkGraphics::updateNetwork(){
	qDebug() << "NetworkGraphics::updateNetwork()";

	scene->clear();
	linkMap.clear();
	rebuildNetwork();

	QPointF position = QPointF(0.0, 0.0);
	QList<raw_address> rootAddrs = network->getTopLevelAddresses();

	for(int i=0; i<rootAddrs.size(); i++){
		if(positionBranch(rootAddrs[i], position)){
			QSizeF size = computeSize(rootAddrs[i]);

			QRectF rect = QRectF(position, size);
			//scene->addRect(rect);*/

			position.setX( position.x() + size.width() + (3.0*CLOUD_X_MARGIN) );

			//scene->update(rect);
		}
	}

	//Draw links
	QList<NetLink*> links = network->getLinks();

	QPen blackPen = QPen();
	blackPen.setColor(Qt::gray);
	blackPen.setWidth(2);


	for(int i=0; i<links.size(); i++){
		NetLink* link = links[i];

		GraphicNetCloud* firstCloud = cloudMap[nodeMap[link->getFirst()]];
		GraphicNetCloud* secondCloud = cloudMap[nodeMap[link->getSecond()]];

		if(firstCloud != secondCloud){

			QPointF startPoint = firstCloud->boundingRect().center();
			QPointF endPoint = secondCloud->boundingRect().center();

			startPoint.setX(firstCloud->pos().x() + startPoint.x());
			startPoint.setY(firstCloud->pos().y() + startPoint.y());

			endPoint.setX(secondCloud->pos().x() + endPoint.x());
			endPoint.setY(secondCloud->pos().y() + endPoint.y());

			QLineF line(startPoint, endPoint);

			QGraphicsLineItem* lineItem = new QGraphicsLineItem(line);
			lineItem->setPen(blackPen);
			lineItem->setZValue(1);
			lineItem->setOpacity(.8);

			scene->addItem(lineItem);

			//qDebug() << "Line: " << line ;

			linkMap.insert(link, lineItem);
		}
	}
}