Qt QGraphicsView использует topleft в качестве источника масштаба - PullRequest
1 голос
/ 24 сентября 2011

Как бы я взял угол вершины, видимый через QGraphicsView, и сохранить его как верх при масштабировании?

Так что, если мне случится иметь символ 'A' в углу вершины при масштабировании, Aоставайся там пока весы.В настоящее время центр экрана принимает начало координат шкалы.Но я бы хотел, чтобы угол в вершине был источником для преобразования.

То есть, в вершине, как видно из графического представления, а не всей графической сцены.Как мне это сделать?

Это мой масштабный код для масштабирования сцены на 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 голосов
/ 25 сентября 2011

Если я правильно понимаю ваш вопрос, вам понадобятся следующие основные шаги:

  1. Переведите представление Qt о происхождении туда, куда вы хотите масштабироваться, т.е. вверху слева
  2. Затем примените шкалу
  3. Затем переведите обратно
...