r
28 ноября 2018 г. 15:30

Scale GraphicsItems, zoom способы реализации

qt, gamedev, QGraphicItem, QGraphicsScene

Есть программа.
Ничего сложного в ней нет
QGraphicsScene
view = Q Graphics View - размером (800, 600)
view->setTransformationAnchor(QGraphicsView::AnchorUnderMouse)
При прокрутке колесом мыши вызывается
view->scale(1.05, 1.05) или view->scale(1/1.05, 1/1.05)

И несколько QGRaphicsRectItem
Предположим что есть country_map = QGRaphicsRectItem( )
размером (2000, 2000)
И mini_country_map = QGRaphicsRectItem( ) размером (200, 200)
Положение mini_country_map, произвольное — то есть имеется возможность поменять позицию элемента.

Как сделать так что бы при изменении размера сцены,mini_country_map - не менял своего размера, country_map - менял ?
Сейчас когда крутим колесом мыши меняется размер обоих объектов.

2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 28 ноября 2018 г. 15:44

Добрый день.

Вы бы хоть код нормально добавили. А то ссылки на ваши локальные файлы на вашем локальном компьютере в интернетах не открываются у других людей.

    r
    • 13 января 2019 г. 21:41
    • Ответ был помечен как решение.
    1. Для того что бы QGraphicsItem не изменял свой размер при увеличениие сцены используют флаг:
    1. QGraphicsItem::ItemIgnoresTransformations

    Псевдокод:

    1. QGraphicsItem::setFlag(QGraphicsItem::ItemIgnoresTransformations, true)
    1. Для того что бы QGraphicsItem не изменял своего положения на экране при увеличениие сцены. Устаналиваем позицию с помощью метода

    1. QGraphicsView::mapToScene(int x, int y)
    .

    Псевдокод:

    1. Для начала координат (0, 0)
    2. QGraphicsItem::setPos(QGraphicsView::mapToScene(0, 0))

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь