LINUX.ORG.RU

Панель инструментов в GraphicsScene

 , , ,


0

4

Недавно подключилась к разработке приложения на Qt5. Основная часть - графическая сцена (GraphicsScene).

Суть такова. На сцене лежит QGraphicsSvgItem, отражающий план помещения. Зум по колесу мышки. При изменении зума меняется размер элемента. Перемещение по сцене перетаскиванием мышки - вызывается QGraphicsView::centerOn() для новой координаты.

На QGraphicsSvgItem отображаются элементы, которые при изменении зума обновляют свои координаты, а размеры остаются неизменными.

Такая вот кухня.

А теперь необходимо отобразить на графической сцене как бы панель инструментов, которая будет всегда сверху, всегда одного размера. Как этого добиться, при условии, что при перемещении по сцене меняется положение «камеры», да и при зуме тоже координаты «съезжают».

К сожалению в GraphicsScene я не сильна. Какие есть способы организовать это дело, помимо обновления координат панели инструментов после изменения зума и положения камеры?


Как на счет делать это не на GraphicScene, а другими виджетами? Ну или повесить выше еще одну GS, если именно ее надо использовать.

S-Mage ★★ ()
Ответ на: комментарий от S-Mage

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

Может ли мне как-то помочь QTransform?

totik ()
Ответ на: комментарий от totik

Повесь еще одну GS поверх той, что есть. Мне кажется, это будет проще, чем каждый раз насиловать мозги с пересчетом координат.

S-Mage ★★ ()
Ответ на: комментарий от S-Mage

Шило на мыло - ничем не будет отличаться от набора виджетов. Никаких тебе полупрозрачностей над сценой.

totik ()

Самому интересен ответ на этот вопрос. Где же тот анонимус, который все знает?

Мне кажется, что прийдется писать свой QGraphicsView который может рендерить несколько QGraphicsScene.

pathfinder ★★★ ()

Придётся делать зум и перемещения не во view, а в самой сцене в таком случае. Можно кнопочки и текущую сцену разнести по группам (QGraphicsItemGroup) и далее пользоваться QGraphicsItemGroup::setTransform(), ну или просто QGraphicsItemGroup::scale(), ::moveBy() и т.п.

Впрочем, есть ещё вариант: кнопочки в группу и выставить группе флаг QGraphicsItem::ItemIgnoresTransformations, так даже лучше, пожалуй, если сработает как надо (не пробовал), и меньше изменений к текущему коду.

unC0Rr ★★★★★ ()
Ответ на: комментарий от unC0Rr

Впрочем, есть ещё вариант: кнопочки в группу и выставить группе флаг QGraphicsItem::ItemIgnoresTransformations, так даже лучше, пожалуй, если сработает как надо (не пробовал), и меньше изменений к текущему коду.

Интересная мысль! Надо попробовать.

totik ()

Я все-таки не понимаю, в чем проблема положить полупрозрачный виджет поверх сцены?

annulen ★★★★★ ()
Ответ на: комментарий от annulen

Какой у него будет parent? Сцена? Элемент схемы? Так у нас камера будет перемещаться относительно сцены и элемента схемы. Следовательно виджет тоже будет менять свое положение, что не желательно.

totik ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.