Форум программистов, компьютерный форум, киберфорум
QML
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 3

QML и Qt Quick Scene Graph

07.03.2016, 11:43. Показов 2048. Ответов 2
Метки qt (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Имеется приложение написанное с использованием Qt Widgets. Существует контейнер, в котором содержится около 40000-50000 объектов. При обновлении данных объекта, или при каком-либо действии пользователя (зум, поворот) на полотне в центре приложения объект отрисовывает себя с помощью QPainter. Чаще всего это круги, линии, при большом зуме круг заменяется изображением.

Моя задача - переписать приложение под QML для использования на мобильных платформах. Пока идея реализации такова:
  1. Создать аналогичный класс контейнер, который наследует QQuickItem и уже непосредственно он будет включен в QML код для последующего отображения
  2. Новые классы объектов также наследуют QQuickItem и у каждого типа переопределен метод QQuickItem::updatePaintNode()
  3. После создания объекта с помощью функции setParentItem() родитель изменяется на контейнер, для последующего отображения объекта
  4. При изменении данных пересчитываются координаты объекта (x, y) согласно размерам класса контейнера. Я правильно понимаю, что в данном случае сцена автоматическе запустит updatePaintNode() и объекты на экране будут перерисованы?

Вопрос 1 - Контейнер для объектов хочу сделать синглтоном. Можно ли передать синглтон в QML для отображения, как обычный QML объект, а не только для использования методов и данных?

Вопрос 2 - Понимаю, что прежде всего способ необходимо тестировать, но все же - будет ли данный метод достаточно быстро работать на мобильных устройствах или же лучше просто адаптировать уже существующий код, использующий QPainter, для QML?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.03.2016, 11:43
Ответы с готовыми решениями:

Open Scene Graph
Народ кто знаком с этой надстройкой, если можете по шагам опишите как её установить на WinXP или скиньте ссылку на руководство, а то у меня...

QML Qt Quick
Доброго времени суток, вот дошел до того что бы учить QT Quick QML, но до сир пор не могу понять, как там происходит работа то скриптами,...

Qt quick + QML
Как реализовать пользовательский элемент QML в котором C++ открывало бы картинку?

2
 Аватар для Wyn
1073 / 654 / 230
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
08.03.2016, 17:19
Цитата Сообщение от thelastpolaris Посмотреть сообщение
Вопрос 1 - Контейнер для объектов хочу сделать синглтоном. Можно ли передать синглтон в QML для отображения, как обычный QML объект, а не только для использования методов и данных?
Можно попытаться. У любого Item(графический примитив QML), суть класс QQuickItem, есть children - список дочерних графических примитивов. Можно попытаться добавить переданный синглтон туда. Только наследоваться вам надо не от QQuickItem, а как минимум от QQuickPaintedItem, который предоставляет инструменты для QPainter.
Цитата Сообщение от thelastpolaris Посмотреть сообщение
Вопрос 2 - Понимаю, что прежде всего способ необходимо тестировать, но все же - будет ли данный метод достаточно быстро работать на мобильных устройствах или же лучше просто адаптировать уже существующий код, использующий QPainter, для QML?
Надо смотреть.

P.S. Однако учтите, во всей этой затее есть большие изъяны. Идеология управления памятью в Qt базируется на принципе parent-child и QML тут не исключение. Как только вы добавите свой синглтон в QML как дочерний элемент - он тут же включится в эту идеологию и может быть удалён QML. Подумайте, возможно стоит немного изменить архитектуру или, как минимум, вставить прослойку, которая цеплялась бы автоматом к синглтону и с которой можно творить всё что угодно.
1
0 / 0 / 0
Регистрация: 10.01.2015
Сообщений: 3
11.03.2016, 05:24  [ТС]
Wyn

Большое спасибо за то, что напомнили про QQuickItem и children. Я сразу и не подумал, что после создания синглтона его просто нужно привязать к какому-либо уже присутствующему Item в QML

Только наследоваться вам надо не от QQuickItem, а как минимум от QQuickPaintedItem, который предоставляет инструменты для QPainter.
QQuickPaintedItem работает медленнее, чем Qt Quick Scene (http://doc.qt.io/qt-5/qtquick-... g-qpainter) поэтому и собираюсь наследоваться от QQuickItem и в updatePaintNode() отрисовывать объект нужным мне образом.

По поводу прослойки буду думать, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2016, 05:24
Помогаю со студенческими работами здесь

Qt, Qt Quick, QML
Что такое Qt Quick и QML? Для чего они? Почему иногда лучше использовать Qt Quick, а не просто Qt? В интернете смотрел описание, но там...

Cannot load scene: Invalid scene name (empty string)
Доброе время суток!!! Вообщем проблема в том ,что почему-то возникая такая ошибка(ниже) т.е. я не могу загрузить уровень. Что делать??? ...

Public Scene scene. Вывести в редактор
Доброго времени. Можно как-то указать нужную мне сцену через инспектор?) 1) public Scene scene - не отображается в инспекторе. 2)...

Подсветка QML элементов QML-ного плагина в QtCreator в случае нахождения QML файлов плагина в ресурсах!
Здравствуйте! Если сделать плагин для QML и подключить его в основном проекте ну как - то так: import MiracleStudio.SkyControls 1.0 ...

Отобразить javafx.scene.image.Image в javafx.scene.layout.GridPane
Подскажите, пожалуйста, как отобразить javafx.scene.image.Image в javafx.scene.layout.GridPane.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru