Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
1

QGraphicsView + mvc + render in thread

12.06.2021, 12:34. Показов 1490. Ответов 19
Метки нет (Все метки)

Здравствуйте. Потребовалось изучить qt в части отображения большого числа графических примитивов(в моем случае линии)
В итоге увидел дежурный вариант QGraphicsView + QGraphicsScene + QGraphicsItem
Уверен что данный дежурный вариант ни одна программа для работы с большим объемом графики не использует в чистом виде. Иначе будет очень неоптимально когда для каждого элемента модели будет хранится его графический объект.
Както надо сделать подзагрузку новых QGraphicsItem при скроллинге сцены, но MVC для QGraphicsView не предусмотрено как я понял.
Также хотелось бы делать рендеринг в отдельном потоке, но наверное желание иметь интерактивное отображение и рендеринг в отдельном потоке вещи взаимоисключающие друг друга. Если только рендерить отдельно каждый примитив QGraphicsItem в отдельном потоке, но накладные расходы на перетаскивание из потока в поток каждой отрендериной картинки по отдельности могут сделать это бессмысленным.
Как всё таки это делается правильно ?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2021, 12:34
Ответы с готовыми решениями:

Что производительнее: Sprite Render или Tilemap Render?
что производительнее Sprite Render или Tilemap Render?

Styles.Render() Scripts.Render() непонятки
Styles.Render() Scripts.Render() не загружают все скрипты и стили, хотя в бандл все записано можете...

Непонятки в Java. Chain method call. Thread.start() vs Thread.run()
Ребят, кто знает подскажите, изучаю Java уже 4 месяца, а до меня все не доходит вот к примеру такая...

Неоднозначный вызов следующих методов или свойств - Thread.Thread()
Вот кусок кода, по которому у меня вопрос: ...

19
436 / 402 / 64
Регистрация: 29.05.2015
Сообщений: 2,680
12.06.2021, 12:54 2
Цитата Сообщение от squareroot Посмотреть сообщение
Потребовалось изучить qt в части отображения большого числа графических примитивов(в моем случае линии)
Просто отображение, или линии должны двигаться?
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 13:02  [ТС] 3
Цитата Сообщение от alexu_007 Посмотреть сообщение
Просто отображение, или линии должны двигаться?
Линии не должны двигаться, но отображение должно быть интерактивным. Т.е. при наведении мыши они должны подсвечиваться.
И еще нюанс. линии могут пересекаться. Не знаю как там в QGraphicsView решается вопрос с перекрытиями.
А вот графический примитив всегда имеет форму прямоугольника.

Добавлено через 4 минуты
P.S. Почитал тех кто спрашивал до меня.
https://www.qtcentre.org/threa... w-Commands
Как то тоскливо было в 2018м. Может что то новое появилось или скетч какй то есть где то.
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 14:07 4
Цитата Сообщение от squareroot Посмотреть сообщение
Както надо сделать подзагрузку новых QGraphicsItem при скроллинге сцены, но MVC для QGraphicsView не предусмотрено как я понял.
Зачем это делать? У Вас что оперативки под объекты не хватает?
При чем тут MVC ?
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 14:10  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Зачем это делать? У Вас что оперативки под объекты не хватает?
При чем тут MVC ?
Не хватает MVC позволит избежать ненужного дублирования данных.
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 14:12 6
Я Вас не понимаю.
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 14:26  [ТС] 7
Цитата Сообщение от Avazart Посмотреть сообщение
Я Вас не понимаю.
Что конкретно ?

Добавлено через 8 минут
Представьте что у Вас база данных на сто тыщ миллионов миллиардов байт. Она может быть на диске или вообще на отдельном сервере.
И Вам надо получать из нее данные и отобрать их. В данном случае данные это графические примитивы.
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 14:35 8
Получайте данные порциями по запросу в чем проблема?
Но не понятно как связана база данные с QGraphicsView
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 14:46  [ТС] 9
Цитата Сообщение от Avazart Посмотреть сообщение
Получайте данные порциями по запросу в чем проблема?
Это общая идея. Нужен конкретный механизм на основе MVC.

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Получайте данные порциями по запросу в чем проблема?
Но не понятно как связана база данные с QGraphicsView
Вот и мне непонятно как их связать для того чтобы получать часть данных при скроллинге.

Добавлено через 7 минут
Из статьи(см. выше ссылку) я понял что нужно создать класс, унаследованный от QGrapicScene и поместить в него кастомное представление, которое связано с моделью. Но вот что где надо перехватить и для чего я не очень понял.
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 15:16 10
Нигде.
Ибо QGraphicsView никакого отношения не имеет к MVC несмотря на наличие слова View в названии.
Всю прогрузку нужно делать программисту что для QGraphicsView что в случаи обычной бд с табличным представлением.
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 15:19  [ТС] 11
Цитата Сообщение от Avazart Посмотреть сообщение
Нигде.
Ибо QGraphicsView никакого отношения не имеет к MVC .
Я где то утверждал обратное ?
0
4114 / 2337 / 973
Регистрация: 07.02.2019
Сообщений: 6,073
12.06.2021, 15:54 12
Цитата Сообщение от squareroot Посмотреть сообщение
Представьте что у Вас база данных на сто тыщ миллионов миллиардов байт. Она может быть на диске или вообще на отдельном сервере.
И Вам надо получать из нее данные и отобрать их. В данном случае данные это графические примитивы.
Такая база данных должна быть организована специальным образом. Структура типа r-tree для 2D или типа kd-tree для 3D. Т.е. в качестве запроса отправляешь прямоугольник, а она тебе все примитивы, которые в нём содержатся. Делать это самостоятельно в рантайме для базы "на сто тыщ миллионов миллиардов байт" мягко говоря глупо.
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 16:02  [ТС] 13
zayats80888, Сама база данных может быть организована по разному.
Не думаю что ктото делает дерево на сто тыщ миллионов триллионов байт. Нет необходимости в этом.
Лучший пример картография. Наверняка хранятся какие то отдельные фрагменты карт, а склейка происходит на месте.
Я пытаюсь найти зацепки в QGraphicScene. К каким слотам/сигналам цепляться.
Механизм взаимодействия QGraphicScene QGraphicView для меня загадка и это мешает найти точку входа.
0
zayats80888
12.06.2021, 16:10
  #14

Не по теме:

Цитата Сообщение от squareroot Посмотреть сообщение
Нет необходимости в этом. Лучший пример картография. Наверняка хранятся какие то отдельные фрагменты карт, а склейка происходит на месте.
Ну так там и используются деревья. Делать выборку в двумерном пространстве тупым перебором никто не будет. Вот пример из области картографии.

0
squareroot
12.06.2021, 16:14  [ТС]
  #15

Не по теме:

Я не говорю что в картографии не используются деревья.
Я просто думаю что они нужны на локальном уровне, а не на глобальном(распределенное хранение)
Но это только догадки.

0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 16:27 16
Цитата Сообщение от squareroot Посмотреть сообщение
Я где то утверждал обратное ?
Повторюсь:а к чему тут MVC?
MVC не подразумевает разбиение данных на порции.

Добавлено через 1 минуту
Цитата Сообщение от squareroot Посмотреть сообщение
Я пытаюсь найти зацепки в QGraphicScene. К каким слотам/сигналам цепляться.
Механизм взаимодействия QGraphicScene QGraphicView для меня загадка и это мешает найти точку входа.
Вполне вероятно что QGraphicScene QGraphicView не особо подходят для такой задачи и вообще придется все реализовывать "все руками".
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 16:29  [ТС] 17
Цитата Сообщение от Avazart Посмотреть сообщение
Повторюсь:а к чему тут MVC?
MVC не подразумевает разбиение данных на порции.
Подразумевает. Представление отображает часть данных.
При скроллинге одни части исчезают, а другие появляются.

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Вполне вероятно что QGraphicScene QGraphicView не особо подходят для такой задачи и вообще придется все реализовывать "все руками".
Вы статью сообщения прочтите, что я давал по ссылке выше, а потом пишите. ОК ?
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 16:43 18
Цитата Сообщение от squareroot Посмотреть сообщение
Подразумевает. Представление отображает часть данных.
При скроллинге одни части исчезают, а другие появляются.
Вовсе нет.
Представление отображает все что есть в модели.
0
11 / 11 / 1
Регистрация: 19.10.2019
Сообщений: 556
12.06.2021, 17:12  [ТС] 19
Цитата Сообщение от Avazart Посмотреть сообщение
Вовсе нет.
Представление отображает все что есть в модели.
Переубеждать не стану. Я уже сам начал сомневаться, но нет.
Всё именно так как я говорил.
0
Эксперт С++
8364 / 6101 / 611
Регистрация: 10.12.2010
Сообщений: 28,457
Записей в блоге: 31
12.06.2021, 17:39 20
Тогда удачи!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2021, 17:39

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Передать данные в работающий thread из другого thread
Есть 2 потока запущенные разными классами и из потока А нужно сообщить потоку Б что бы он запустил...

Метод Thread.Suspend(),Thread.Resume()
Здравствуйте,пытаюсь сделать игру простенькую в Windows Form. И хочу,чтобы в ней было включено...

Exception in thread "main" Exception in thread "Thread-0" java.lang.ExceptionInInitializerError
Подскажите, пожалуйта - подхватываю в NetBeans распакованный jar. Прога нормально запускается. ...

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException при создании Label
Пытаюсь написать чат по видео, в видео писали на Swing, я решил на JavaFX сразу начать учиться....

Как исправить проблему с Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at...

Ошибка компиляции "no instance of constructor 'std::thread::thread' matches the argument list"
Не могу сообразить почему возникает ошибка. У меня в классе есть метод, который должен работать в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.