多形状图节点绘制的最佳设计方法

时间:2016-04-11 09:58:38

标签: c++ qt oop

我使用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个节点形状的图形的最佳实践是什么,因为绘制边缘我必须知道每个节点的边界矩形的尺寸。

0 个答案:

没有答案