Russian Qt Forum

Qt => Вопросы новичков => Тема начата: dqrest от Апрель 25, 2012, 09:20



Название: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: dqrest от Апрель 25, 2012, 09:20
Вообщем задача такова, нужно среди всей кучи QGraphicsScene найти QGraphicsLineItem с зеленым цветом, которая пересекается с заданной прямой. Считается, что в QGraphicsScene очень много QGraphicsItem(1 000 000), есть список номеров линий(их очень мало, порядка 20-30 штук) с зеленым цветом,  следующие в том порядке, в котором вводились в QGraphicsScene, т.е. если порядок введения фигур в QGraphicsScene такой, что 0 - круг(черный); 1-линия(зеленая); 2 - круг(белый); 3-линия(черная) ; 4-линия(зеленая) , тогда список номеров зеленых линий ={1 ; 4;}. Но, Qt довольно плохо оптимизирован и при обращении к items() он сделает копию всех указателей. На 32-битной системе это займёт как минимум 4 МБ памяти. можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView, где QGraphicsScene A будет хранить все фигуры, а QGraphicsScene В  только зеленые линии, обрабатывать надо только зеленые линии, фигуры QGraphicsScene A статичны. Далее после обработки зеленых линий их надо перекрасить в синий цвет и  удалить его из QGraphicsScene В, добавив в QGraphicsScene A. Помогите, плиз. кстати, фоны в QGraphicsScene А и В одинаковы, достаточно, попиксельно на сцену А добавить сцену В.главное, чтобы зеленые линии были видны.


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: Bepec от Апрель 25, 2012, 09:36
Кхм... Возможно обижу. Но чёгой то у вас всё сумбурно и непонятно.

Что вам мешает проверить коллизии этой прямой?


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: GreatSnake от Апрель 25, 2012, 10:22
Что вам мешает проверить коллизии этой прямой?
Тебе же сказали:
Но, Qt довольно плохо оптимизирован и при обращении к items() он сделает копию всех указателей. На 32-битной системе это займёт как минимум 4 МБ памяти.


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: dqrest от Апрель 25, 2012, 10:25
все нормально)))все дело в производительности, зачем мне отслеживать коллизии 1 000 000 штук обэектов QGraphicsItem, в то время когда я буду все это отслежтвать только для 20-30 штук. понятно????


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: GreatSnake от Апрель 25, 2012, 10:43
Боюсь, что даже если ты и совместишь 2 сцены, то ничего не выиграешь, если не проиграешь вообще.
Дело в том, что получить доступ к элементам сцены без перебора и копии не получится никак.
Способ проверить это - следующий:
* создаёшь 2 своих сцены; привязываешь к view только 2-ю сцену
* перегружаешь QGraphicsView::drawBackground()
* вызываешь first_scene->render()
* вызываешь базовый QGraphicsView::drawBackground()


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: dqrest от Апрель 25, 2012, 10:47
спасибо)))выручил))по эксперементирую, посмотрим, что получится)))


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: _OLEGator_ от Апрель 25, 2012, 11:32
УжОс.
Зачем 2 сцены использовать, если есть другие варианты контейнеров для QGraphicsItem.
Добавляешь все объекты на свою сцену, а нужные (зеленые линии в данном случае) можно хранить в отдельном списке и напрямую с ними работать без сцены.
Контейнеров целая куча:
Код
C++ (Qt)
QVector <QGraphicsItem*>
QList <QGraphicsItem*>


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: GreatSnake от Апрель 25, 2012, 11:35
Зачем 2 сцены использовать, если есть другие варианты контейнеров для QGraphicsItem.
Добавляешь все объекты на свою сцену, а нужные (зеленые линии в данном случае) можно хранить в отдельном списке и напрямую с ними работать без сцены.
Ню-ню... А как ты их рендерить без сцены будешь?


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: _OLEGator_ от Апрель 25, 2012, 11:37
Ню-ню... А как ты их рендерить без сцены будешь?

GreatSnake, читаем внимательно, да?

Добавляешь все объекты на свою сцену, а нужные (зеленые линии в данном случае) можно хранить в отдельном списке и напрямую с ними работать без сцены.


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: GreatSnake от Апрель 25, 2012, 11:41
Ну, может быть)


Название: Re: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView
Отправлено: dqrest от Апрель 25, 2012, 15:11
спасибо))))можете закрывать тему!!!