Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Figaro от Март 12, 2011, 04:35



Название: QGraphicsScene: Как сделать более кошерно...
Отправлено: Figaro от Март 12, 2011, 04:35
Доброго времени суток..

Не могу решить как реализовать:
Есть общая сцена, вью и etc. Юзера там извращаются над графическими примитивами. Нужно сделать историю в виде списка изображений последних изменений (ограничение - не более 60 снапшотов), что то вроде коммита, когда юзер захочет. Окно истории должно поверх основной сцены. Сумбурно немного. У меня есть такие варианты:
1. Сделать отдельное окно на основе обычного виджета и парентом его установить основное для приложения. Соответственно своя сцена, вью.
2. Реализовать еще один вид QGraphicsItem'ов и установить ему максимальный z-order.
3. Тож самое как и в п.2, но извратиться группой айтемов.
4. Использовать наследника QGraphicsWindow.


Хм.. остановился сначала на п.4. но смутил пост на форуме нокии одного уважаемого пиндоса, типа: "QGraphicsScene.addWidget скоро отомрет, оставлен ток для совместимости".. Так вот.

и P.S. Не хочется быть велосипедо строителем, но есть ли готовые решения?


Название: Re: QGraphicsScene: Как сделать более кошерно...
Отправлено: _OLEGator_ от Март 13, 2011, 21:21
Я бы сделал обычным списком (QListView), а его хоть поверх сцены разместить можно, хоть в саму сцену вставить


Название: Re: QGraphicsScene: Как сделать более кошерно...
Отправлено: Sancho_s_rancho от Март 13, 2011, 21:41
Виджет пихать в сцену не очень хорошо в плане производительности. Т.е. на данный момент (к примеру) вам надо только информацию вывести, а потом вы захотите его еще и двигать или менять размер и тут будет засада. Да и виджет этот несколько инородно для сцены в плане внешнего вида.
Вариант с QGraphicsItem-ми отрисовываться будет гораздо быстрее.
Создаете прямоугольник QGraphicsItem с ZValue=1.0 и в нем размещаете все, что надо.
Пост Скриптум: однако к словам этого пиндоса я отношусь скептически. Просто это не эффективно.


Название: Re: QGraphicsScene: Как сделать более кошерно...
Отправлено: _OLEGator_ от Март 13, 2011, 21:46
Самому изобретать свой вьювер... В данном случае имеет смысл прикрутить стандартный механизм Undo/Redo.
Про производительность думаю не критично, если вообще будет заметно и почему для сцены виджеты инородны? они по факту просто картинки для сцены, а все события перетранслируются через QGraphicsProxyWidget...


Название: Re: QGraphicsScene: Как сделать более кошерно...
Отправлено: Sancho_s_rancho от Март 13, 2011, 21:58
Самому изобретать свой вьювер... В данном случае имеет смысл прикрутить стандартный механизм Undo/Redo.
Про производительность думаю не критично, если вообще будет заметно и почему для сцены виджеты инородны? они по факту просто картинки для сцены, а все события перетранслируются через QGraphicsProxyWidget...
Про производительность: автору видней развитие программы. Мое дело предупредить (Warning: This class is provided for convenience when bridging QWidgets and QGraphicsItems, it should not be used for high-performance scenarios.). Может и не критично.
Инородны в плане внешнего вида. Т.е. ,грубо говоря, стиль виджета надо подогнать под содержимое сцены.


Название: Re: QGraphicsScene: Как сделать более кошерно...
Отправлено: _OLEGator_ от Март 13, 2011, 22:03
ну собственно мы автору уже предоставили выбор)
какой там стиль у списка, только краев, а делегат все равно самому реализовывать скорее всего надо будет...