Hiçbir arabirim bulamadım bu yüzden koordinatları kendim getiriyorum, ancak bu yaklaşım mükemmel değil çünkü düzen algoritması negatif koordinatlar döndürüyor. Grafik merkezi noktası, normal üst düzey kökeni yerine, düşünüyorum. Kodum şunun gibi görünüyor:
int nodeWidth = 30, nodeHeight = 30, siblingDistance = nodeWidth + nodeHeight;
ogdf::TreeLayout treeLayout;
treeLayout.siblingDistance(siblingDistance);
treeLayout.call(GA);
int width = GA.boundingBox().width(), height = GA.boundingBox().height();
ui->graphView->scene()->setSceneRect(QRect(0, 0, width+nodeWidth, height+nodeHeight));
cout << "Scene dimensions: " << GA.boundingBox().width() << " x " << GA.boundingBox().height() << endl;
GA.setAllWidth(nodeWidth);
GA.setAllHeight(nodeHeight);
ogdf::edge e;
forall_edges(e,graph){
ogdf::node source = e->source(), target = e->target();
int x1 = GA.x(source), y1 = GA.y(source);
int x2 = GA.x(target), y2 = GA.y(target);
QPainterPath p;
p.moveTo(x1 + nodeWidth/2, y1 + nodeHeight/2);
p.lineTo(x2 + nodeWidth/2, y2 + nodeHeight/2);
(void) ui->graphView->scene()->addPath(p, QPen(Qt::darkGray), QBrush(Qt::white));
}
ogdf::node n;
forall_nodes(n, graph) {
double x = GA.x(n);
double y = GA.y(n);
double w = GA.width(n);
double h = GA.height(n);
QRectF boundingRect(x, y, w, h);
cout << x << " : " << y << " : " << endl;
QRadialGradient radialGradient(boundingRect.center(), boundingRect.width());
radialGradient.setColorAt(1.0, Qt::lightGray);
radialGradient.setColorAt(0.7, QColor(230,230,240));
radialGradient.setColorAt(0.0, Qt::white);
(void) ui->graphView->scene()->addEllipse(boundingRect, QPen(Qt::black), QBrush(QRadialGradient(radialGradient)));
QGraphicsTextItem *text = ui->graphView->scene()->addText(QString(GA.labelNode(n).cstr()));
text->setPos(x, y);
}
// clear the graph after it has been displayed
graph.clear();
Çok teşekkürler! Şu an gördüğüm gibi doğru yoldaydım. Örnek kodun bulunması çok büyük bir yardım! OGDF ile deneyimlediniz mi? – TeaOverflow
Oh ve düğümlerin negatif koordinatları QGraphicScene ile gayet güzel çalışıyorlar, çünkü onun '0,0' kendi merkezinde de var gibi görünüyor. – TeaOverflow