如何正确缩放图形?

时间:2018-10-11 13:35:45

标签: c++ qt qt5

现在,我需要根据其坐标绘制一些折线。这些是一条折线的坐标:

 1.15109497070313E+02 2.73440704345703E+01
 1.15115196228027E+02 2.73563938140869E+01
 1.15112876892090E+02 2.73697128295898E+01
 1.15108222961426E+02 2.73687496185303E+01
 1.15081001281738E+02 2.73908023834229E+01
 1.15078292846680E+02 2.73949108123779E+01
 1.15073806762695E+02 2.74090080261230E+01
 1.15063293457031E+02 2.74221019744873E+01
 1.15059646606445E+02 2.74324569702148E+01

我已经绘制了这些折线并将其移动到窗口的中心:

QPainter painter(this);
QPainterPath path;
for (auto& arc : layer.getArcs()) {
    for (int i = 0; i < arc.pts_draw.size() - 1; i++)
    {
        QPolygonF polygon = QPolygonF(arc.pts_draw);
        path.addPolygon(polygon);
    }
}

// move all polylines to the center of window
QPointF offset = rect().center() - path.boundingRect().center();
painter.translate(offset);

painter.drawPath(path);

但是,我在窗口中看到的是:
enter image description here
我认为是由坐标引起的。所有坐标都非常接近,因此在窗口中绘制时图形将变得太小。所以我的问题是如何正确缩放图形?换句话说,我怎么知道缩放比例?

1 个答案:

答案 0 :(得分:0)

QGraphicsView上,您可以调用scale(qreal sx, qreal sy)来缩放QGraphicsScene及其所有QGraphicsItems。如果您希望单独缩放每个项目而不是整个场景,请获取多边形中的每个点并使用Euclidian geometry scaling to scale your polygon。或者您可以使用QTransform like this post did