QGraphicsItem :: setTransformOriginPoint ошибка при попытке масштабирования изображения - PullRequest
0 голосов
/ 11 марта 2011

Я создал свой собственный класс, расширив QGraphicsItem, и я хочу сделать так, чтобы, когда кто-то делает колесо, даже когда над этим элементом, он масштабировался.

Таким образом, я могу иметь несколько элементов всцену, и масштабируйте каждый из них как угодно.

Проблема в том, что я хочу, чтобы элемент масштабировался под курсором мыши, так же, как это делают карты Google.То есть движение вперед будет продолжать панорамирование изображения и его масштабирование, так что область вокруг моего указателя мыши всегда будет видна.

void ImagePixmapItem::wheelEvent ( QGraphicsSceneWheelEvent * event ){

    update();
    qreal factor = 1.2;
    if (event->delta() < 0)
      factor = 1.0 / factor;

    scale(factor, factor);

    scaleFactor *=factor;
    this->scene()->setSceneRect(0,0,this->boundingRect().width(), this->boundingRect().height());

}

Это код, который я использую для выполнениямасштаб.Проблема в том, что он всегда масштабируется из левого верхнего угла.Что ж, это нежелательно, потому что, если я увеличиваю или уменьшаю масштаб, в конечном итоге моя область интереса вокруг указателя мыши переместилась за пределы экрана, и мне нужно либо прокрутить вручную, либо выполнить панорамирование до местоположения, масштабирование, панорамирование и т. Д.,пока я не доберусь до желаемого уровня.

Я пытался использовать QGraphicsItem :: setTransformOriginPoint, но независимо от того, какие значения я там ввел, он все равно кажется масштабированным и таким сверху слева.

Что я могу добавить к тому коду, который я разместил, чтобы получить желаемый эффект?

1 Ответ

1 голос
/ 19 марта 2011

Я достиг аналогичной функциональности в своем приложении Image-Manipulation (масштабирование вида и область под моей мышью остаются на месте и видимы), но я масштабирую весь графический вид, а не конкретный элемент, поэтому я не знаюесли этот код может решить вашу проблему.

Во всяком случае, это то, что я делаю в конструкторе моего подкласса QGraphicsView (после того, как я установил сцену):

setTransformationAnchor(AnchorUnderMouse);
setResizeAnchor(AnchorViewCenter);

Я также использую вышефункции, после каждого вызова: MyGraphicsView-> setTransform (transform);

Я не уверен, может ли это вам помочь, но я надеюсь на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...