LINUX.ORG.RU

[Qt] Создание своего объекта сцены

 


0

0

Имеется унаследованный от QGraphicsView виджет Area. Переопределены drawBackground() и drawForeground().

scene()->addRect(some_rectangle) добавляет в сцену QGraphicsRectItem и рисует прямоугольничек. Делаем 10000 прямоугольников и получаем тормоза при, например, масштабировании (которые почему-то особенно заметны под виндой).

painter->drawRect(some_rectangle), вызванный для 10000 прямоугольников к тормозам не приводит.

Почему так?

Как делать свой QGraphicsItem, который делал бы прямоугольник и не тормозил? Всякие операции не нужны, только рисовать и удалять.

★★★★★

Конкретно интересует причина торможения прямоугольников в сцене и какой-нибудь пример создание своего QGraphicsItem.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

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

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

Ясно. Как раз хотелось бы использовать пэйнтер напрямую.

Конечно, можно хранить массив прямоугольничков прямо внутри view и рисовать их, но это велосипедостроение, ведь для этого и придумали систему Scene-View.

Но как создать своё? Примеров не нашёл.

То есть всё что нужно — рисовать и удалять прямоугольники заданных размеров и с заданным центром. Всё.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Алсо, профайлер у тебя мама отобрала?

я-то и дебаггер не осилил

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

производительность debug и release бинарников иногда отличается в сотни раз.

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

тьфу, точно

спасибо за подсказку

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