Qt QGraphicsView使用topleft作为比例原点

时间:2011-09-24 14:36:24

标签: qt scale qgraphicsview

如何通过QGraphicsView看到topleft转角并在缩放时保持它的位置?

因此,如果我在缩放时恰好在前角有一个符号'A',那么A将保持在那里然后缩放。目前屏幕的中心是作为比例原点。但我希望topleft corner成为转型的起源。

即,在图形视图中看到的是topleft,而不是整个图形场景。 我该怎么做?

这是我的缩放代码,用于将场景的宽度的100%缩放到视口:

void GraphicsView::resizeEvent(QResizeEvent *event)
{
    QGraphicsView::resizeEvent(event);

    double scale_delta = (double) event->size().width() / scene()->width();
    resetMatrix();

    scale(scale_delta, scale_delta);
}

void GraphicsView::resizeEvent(QResizeEvent *event)
{
    QGraphicsView::resizeEvent(event);

    if (!first_shown)
    {
        centerOn(0, 0);
        first_shown = true;
    }

    QPointF topleft = mapToScene(viewport()->rect().topLeft());

    resetMatrix();

    QPointF shift = (mapToScene(viewport()->rect().bottomRight() + QPoint(1, 1)) - mapToScene(viewport()->rect().topLeft()));
    shift /= (double) event->size().width() / scene()->width();

    fitInView(QRectF(topleft, topleft + shift));
}

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你需要的基本步骤是:

  1. 将Qt关于原点的想法转换为您想要缩放的位置,即左上角
  2. 然后应用比例
  3. 然后再翻译