我使用Qt C ++绘制代表电子电路的图形。问题是并非所有节点都具有相同的形状,我有2种节点(圆形,多边形),有一个边缘类和一个节点类来绘制图形。问题是它们紧密耦合,对于每个节点我必须定义必须在其中绘制的边界矩形,并且我在连接2个节点的边缘对象中使用边界矩形尺寸。例如,这里是矩形节点的边界矩形:
QRectF Node::boundingRect() const {
qreal cx=-22;
qreal cy=-11;
return QRect(cx,cy,-2*cx,-2*cy);
}
以下是为每个节点绘制边缘的方法
void Edge::adjust(){
if(!sourceNode || !destNode)
return;
QLineF line(mapFromItem(this->sourceNode,0,0),mapFromItem(this->destNode, 0, 0));
qreal length=line.length();
qreal rx=22; //radius of Node bounding rectangle in x direction
qreal ry=11; //radius of Node bounding rectangle in y direction
prepareGeometryChange();
if(length>20){
QPointF offset((line.dx() * rx)/length,(line.dy()*ry)/length);
//adjusting the start position of edges
sourcePoint=line.p1() + offset;
destPoint=line.p2() - offset;
}
else{
sourcePoint=destPoint=line.p1();
}
}
我不知道如何使用这两个类来处理不同类型的节点。我想继承节点类并覆盖每个不同形状的边界矩形函数,但我不知道如何为不同类型的节点绘制边。 总而言之,我想知道绘制具有2个节点形状的图形的最佳实践是什么,因为绘制边缘我必须知道每个节点的边界矩形的尺寸。