Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Скрыть\закрасить часть items в QGraphicsView


Автор: becks 29.1.2013, 10:08
Добрый день! На графической сцене QGraphicsScene есть довольно большое количество (несколько десятков тысяч) айтемов и бывает нужно бОльшую часть из них перекрасить в серый цвет, в крайнем случае скрыть, остальные оставить как есть (остальных обычно не больше сотни).
Со скрытием все работает очень быстро, но не нравится тем, что пользователь не видит всей картины. С перекраской боюсь все будет значительно хуже в плане скорости. Правильно понимаю, для того чтобы оставить айтемы активными на сцене и не бросающимися в глаза, единственный вариант, пройтись по каждому из них и произвести repaint? Или есть что-то быстрее, например (предлагаю из головы вариант) добавить айтемы, которые необходимо перекрасить, в группу и для этой группы сделать некоторый фон...

Автор: math64 29.1.2013, 14:02
Блокируй события от сцены, перекрашивай айтемы (перерисовки не будет, должно быть быстро), разблокируй и перерисуй всю сцену.

Автор: becks 6.2.2013, 11:37
Цитата(math64 @  29.1.2013,  14:02 Найти цитируемый пост)
Блокируй события от сцены, перекрашивай айтемы (перерисовки не будет, должно быть быстро), разблокируй и перерисуй всю сцену. 


В идеале хотелось бы иметь что-то типа:

1) Изначально:
http://s2.ipicture.ru/

2) После перекраски:
http://s2.ipicture.ru/


Только граф будет много больше. Плюс надо еще подумать как перекрашивть айтемы (в какой цвет). Прочитл что вроде можно умножать RGB на коэфициенты >1 для осветления.

Автор: Amp 6.2.2013, 13:41
Кстати знакомая картинка. В Gephi в режиме редактирования картинка рендерится через OpenGL - в ущерб качеству, но зато с адекватной скоростью. Сам тоже делал визуализацию графов на OpenGL. Приятного в реализации мало, профит в скорости.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)