Russian Qt Forum
Сентябрь 30, 2024, 12:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: можно ли вообще как-нибудь совместить 2 QGraphicsScene в один QGraphicsView  (Прочитано 4803 раз)
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 А и В одинаковы, достаточно, попиксельно на сцену А добавить сцену В.главное, чтобы зеленые линии были видны.
« Последнее редактирование: Апрель 25, 2012, 09:24 от dqrest » Записан
Bepec
Гость
« Ответ #1 : Апрель 25, 2012, 09:36 »

Кхм... Возможно обижу. Но чёгой то у вас всё сумбурно и непонятно.

Что вам мешает проверить коллизии этой прямой?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Апрель 25, 2012, 10:22 »

Что вам мешает проверить коллизии этой прямой?
Тебе же сказали:
Но, Qt довольно плохо оптимизирован и при обращении к items() он сделает копию всех указателей. На 32-битной системе это займёт как минимум 4 МБ памяти.
Записан

Qt 5.11/4.8.7 (X11/Win)
dqrest
Гость
« Ответ #3 : Апрель 25, 2012, 10:25 »

все нормально)))все дело в производительности, зачем мне отслеживать коллизии 1 000 000 штук обэектов QGraphicsItem, в то время когда я буду все это отслежтвать только для 20-30 штук. понятно?Непонимающий
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Апрель 25, 2012, 10:43 »

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

Qt 5.11/4.8.7 (X11/Win)
dqrest
Гость
« Ответ #5 : Апрель 25, 2012, 10:47 »

спасибо)))выручил))по эксперементирую, посмотрим, что получится)))
Записан
_OLEGator_
Гость
« Ответ #6 : Апрель 25, 2012, 11:32 »

УжОс.
Зачем 2 сцены использовать, если есть другие варианты контейнеров для QGraphicsItem.
Добавляешь все объекты на свою сцену, а нужные (зеленые линии в данном случае) можно хранить в отдельном списке и напрямую с ними работать без сцены.
Контейнеров целая куча:
Код
C++ (Qt)
QVector <QGraphicsItem*>
QList <QGraphicsItem*>
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Апрель 25, 2012, 11:35 »

Зачем 2 сцены использовать, если есть другие варианты контейнеров для QGraphicsItem.
Добавляешь все объекты на свою сцену, а нужные (зеленые линии в данном случае) можно хранить в отдельном списке и напрямую с ними работать без сцены.
Ню-ню... А как ты их рендерить без сцены будешь?
Записан

Qt 5.11/4.8.7 (X11/Win)
_OLEGator_
Гость
« Ответ #8 : Апрель 25, 2012, 11:37 »

Ню-ню... А как ты их рендерить без сцены будешь?

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

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

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Апрель 25, 2012, 11:41 »

Ну, может быть)
Записан

Qt 5.11/4.8.7 (X11/Win)
dqrest
Гость
« Ответ #10 : Апрель 25, 2012, 15:11 »

спасибо))))можете закрывать тему!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 23.