2013-04-17 2 views
1

Я делаю приложение с использованием Qt (в настоящее время 4.8), которое отображает литеральную карту из большого количества элементов QGraphicsScene. Я хотел бы аннотировать представление шкалой. Мое требование для шкалы заключается в том, что она постоянно фиксируется w.r.t виджета видового экрана. Его необходимо обновлять всякий раз, когда изменяется масштаб просмотра (увеличение и т. Д.). Существуют и другие возможные элементы наложения (компас и т. Д.), Поэтому я бы предпочел использовать общее решение.Создание постоянного статического наложения для сцены QGraphicsView

Я смотрел на предыдущие вопросах вокруг этого которые предполагают:

  • используя ItemIgnoresTransform
  • с помощью наложения растрового изображения.

Я пробовал IgnoresTransform, но этот способ не сработал правильно: я не мог понять, как исправить его на месте (скажем) в нижнем углу видового экрана и с некоторым трудом получить текст и строки всегда отображается в правильном размере.

Я отменил это и подклассифицировал QGraphicsView, добавив накладную pixmap, переопределив paintEvent (вызывает оригинальную, затем нарисовывает наложенную pixmap сверху) и параметр выравнивания, чтобы указать, куда он идет. Кодирование некоторого кода рисования pixmap создает полезную шкалу на представлении. Ура! ... но это не работает со свитками - я получаю «разбитые» визуализации масштаба по всему, или иногда вообще не масштабируется. Я думаю, это потому, что QGraphicsView :: scrollViewportBy() использует viewport() -> scroll(), поэтому я задавался вопросом, поможет ли переключение на ViewportSmartUpdate, но это не помогает. Я бы предпочел не переключиться на ViewportFullUpdate, поскольку это, скорее всего, замедлит приложение слишком много (на сцене есть миллионы предметов, и для этого потребуется полная перерисовка, чтобы передвигаться).

So. Любые идеи отсюда? Будет ли лучше адаптировать мой код pixmap для написания нового, в основном прозрачного виджета, который накладывается на видовое окно?

Спасибо за любую помощь ...

ответ

1

Хотя это может быть не самый лучший способ сделать это, в прошлом я добавил пользовательские виджеты в окне, которое держит QGraphicsView/QGraphicsScene, которые имеют тот же графический стиль, как QGraphicObjects в сцене. Когда представление затем используется для перемещения объектов в сцене или самой сцены, элементы в окне остаются в одном месте.
Надеюсь, что помогает.

+0

Да, после игры, это действительно лучший способ. Благодарю. – rivimey

Смежные вопросы