Russian Qt Forum

Qt => Qt Quick => Тема начата: deMax от Март 06, 2014, 12:38



Название: QML, нужно ли?
Отправлено: deMax от Март 06, 2014, 12:38
Есть приложение с двумя типами визуальных виджетов - opengl 2d(очень много объектов и ресурсов) и opengl 3d, базой данных и математикой. Так же присутствует простенький интерфейс к этим графическим элементам(кнопки, текст, таблицы и окна). Есть ли смысл переделать интерфейс в QML и насколько это сложно?
Критична стабильность приложения.


Название: Re: QML, нужно ли?
Отправлено: OKTA от Март 06, 2014, 13:25
Если интерфейс простой и не требует всяких красивостей - оставь как есть)


Название: Re: QML, нужно ли?
Отправлено: deMax от Март 06, 2014, 13:46
OKTA, хочется проработать вопрос переноса GUI в QML. Насколько это реально - т.е. прикрутить к бизнес-логике QML и 2 элемента на opengl (Виджеты 2d и 3d тяжелые и красивые в QML не засунуть). При этом структура должна быть красивой и без костылей.


Название: Re: QML, нужно ли?
Отправлено: OKTA от Март 06, 2014, 14:08
Да конечно реально)) а что за виджеты тяжелые и красивые? покажи, может не проблема тоже будет перенести.


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Март 06, 2014, 14:22
таблицы и окна

В QML все виджеты для отображения данных представляют собой View, в который ты должен установить модель с данными. Если у тебя таблица - это QTableWidget, то придётся серьёзно переделывать. Также в QML нет диалогов, есть только окно с возможностью сделать его модальным. Функциональность диалога придётся писать самому.


Название: Re: QML, нужно ли?
Отправлено: deMax от Март 06, 2014, 15:21
Цитировать
Если у тебя таблица - это QTableWidget, то придётся серьёзно переделывать.
Интерфейс не сложный, у меня есть БД, и нужно отредактировать некоторые таблицы целиком. Выводить результаты sql запросов в табличном виде. Все остальное кнопки, диалоги, настройки.

Цитировать
а что за виджеты тяжелые и красивые? покажи, может не проблема тоже будет перенести.
2д - рисуется больше тысячи значков и несколько картинок загружаемые из гигабайтного архива. математика рисования простая - просто выводиться много изображений и линий в нужных координатах, постоянно обновляется(просчитанных в отдельном модуле). Обратная связь на мышку.
3д - отображение физического объекта и информация по нему, мониторинг состояния без воздействия на него(освещенность, тени... ).

В полном экране виден только один виджет 3d/2d.

А можно красивый пример приложения где бизнес логика на qt с++, gui на qml и поддержка своих виджетов.
---
Что меня смущает в QML, если приложение будет запускаться на машинах не самой высокой производительности. Какие потери по сравнению с чистым opengl?
Можно даже без использования виджетов, просто отобразить две области на чистом opengl.


Название: Re: QML, нужно ли?
Отправлено: OKTA от Март 06, 2014, 15:33
Кстати, посмотрел сейчас, в QtQuick.Controls 1.0 есть TableView, так что с таблицей тоже особых проблем не будет.
На сколько мне известно, в 5-й версии Qt может использовать движок Opengl для отрисовки qml.
А примеры поискать надо - вот нашелся красивенький https://blog.qt.digia.com/blog/2013/12/10/cross-platform-applications-in-ios-and-android-stores-with-qt/


Название: Re: QML, нужно ли?
Отправлено: deMax от Март 06, 2014, 15:58
Мне наоборот, нужно в произвольных областях отрисовывать напрямую на opengl(боюсь через QML тормоза будут).
Можно ли на QML реализовать что то похожее на Eclipse(многооконный интерфейс в одном окне).


Название: Re: QML, нужно ли?
Отправлено: OKTA от Март 06, 2014, 17:52
Все можно) Было бы желание)))
А насчет тормозов и остального - проверь) Примеры реализации "openGl через qml" есть.


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Март 06, 2014, 20:28
Кстати, посмотрел сейчас, в QtQuick.Controls 1.0 есть TableView, так что с таблицей тоже особых проблем не будет.

Как же не будет, если это просто view. В QTableWidget все данные хранятся внутри него, а в случае QML все данные придётся выносить в модель, прописывать роли столбцам и заниматься всякой фигнёй типа ручной сортировки через QSortFilterProxyModel, ибо QML-вские view сортировку не поддерживают.

На сколько мне известно, в 5-й версии Qt может использовать движок Opengl для отрисовки qml.

Он не только может, он и использует всегда. На системе без ускоренного OpenGL скорость отрисовки QML становится намного печальней.


Название: Re: QML, нужно ли?
Отправлено: deMax от Март 07, 2014, 07:34
Насколько реально в QML реализовать мультиоконный интерфейс, главное окно разбито на части, в каждой части отображается свое содержимое и пользователь может манипулировать окнами(по типу Photoshop, Eclipse...).
Два окна(области) должны быть на чистом opengl(соединение с данными напрямую, биз сигналов и слотов). Видел я приложение на java из схожей предметной области в части 3d - производительность очень не устраивает.


Название: Re: QML, нужно ли?
Отправлено: OKTA от Март 07, 2014, 09:27
Понятно, что все просто так не будет работать и придется помучиться  ;D

Товарищ deMax, все реально - просто все зависит от вашего личного желания опробовать эту технологию)))

Вот еще всякие красивости на qml с исходниками http://quitcoding.com/?page=work#ledscreen


Название: Re: QML, нужно ли?
Отправлено: deMax от Март 11, 2014, 11:35
А есть хорошие примеры? Дизайн на QML, логика на C++, поддержка виджетов и opengl.

Правильно ли я понял, что в Qt5 советуют переходить на интерфейс создаваемый через QML. QUiLoader для динамического интерфейса в Qt5 уже не рекомендуется?




Название: Re: QML, нужно ли?
Отправлено: deMax от Октябрь 16, 2014, 08:10
Товарищ deMax, все реально - просто все зависит от вашего личного желания опробовать эту технологию)))
Желание есть, но нет желания получить на выходе тормозящий интерфейс. С другой стороны интерфейс программы для QML(кроме двух виджетов в opengl) достаточно прост, анимация только у значков.

p.s.
Запускал на версии 5.0 пример с combobox для выбора шрифта - тормоза просто неприемлемые.
Запускал на версии 5.3 примеры, имхо многовата нагрузка на проц. Да QML красиво, но эффект веб сайта - что то кликнул и ждешь ответ сервера.


Название: Re: QML, нужно ли?
Отправлено: __Heaven__ от Октябрь 16, 2014, 09:20
Я на 5.3 запускал примеры и мне не очень понравилась прорисовка шрифтов - муть


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 16, 2014, 11:42
Есть ли смысл переделать интерфейс в QML и насколько это сложно?
Критична стабильность приложения.
Смотря какие цели преследуются. Сделать красиво? Запуск на мобильных устройствах? Если нужна простота и стабильность, то лучше оставить как есть :).

OKTA, хочется проработать вопрос переноса GUI в QML. Насколько это реально - т.е. прикрутить к бизнес-логике QML и 2 элемента на opengl (Виджеты 2d и 3d тяжелые и красивые в QML не засунуть). При этом структура должна быть красивой и без костылей.
Прикрутить реально, и структура будет вполне приличной. Для интеграции своего рендеринга в сцену QML можно использовать QQuickFramebufferObject (http://qt-project.org/doc/qt-5/qquickframebufferobject.html).

По поводу виджетов на QML, похоже ещё не так хорошо, как хотелось бы. Что есть на текущий момент, можно посмотреть в модулях Quick * (http://qt-project.org/doc/qt-5/qtmodules.html). Нужно приготовиться к тому, что многое придётся делать своими руками.

Избежать тормозов может помочь знание внутренней кухни рендеринга QML, например Qt Quick Scene Graph Renderer (http://doc-snapshot.qt-project.org/qt5-5.3/qtquick-visualcanvas-scenegraph-renderer.html).

В любом случае придётся экспериментировать, чтобы понять, насколько QML подходит для поставленной задачи, и прочувствовать его возможности. Одно и то же можно сделать разными способами и тормозить/летать будет соответственно :).


Название: Re: QML, нужно ли?
Отправлено: deMax от Октябрь 16, 2014, 12:57
А есть аналог QML чтоб без java и интерпретатора. Я вот задумываюсь взять QML или что то похожее и самому пропарсить.

Смотря какие цели преследуются. Сделать красиво? Запуск на мобильных устройствах? Если нужна простота и стабильность, то лучше оставить как есть :).
Мобильные устройства пока не нужны.

Одно и то же можно сделать разными способами и тормозить/летать будет соответственно
Ага только как не изголяйся, а java без суперкомпьютера все равно тормозить будет(для средних задач).


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 16, 2014, 13:44
Ну там не java, а javascript, что несколько разные вещи. Не знаю, насколько там много интерпретируется, но из дерева элементов Item (http://qt-project.org/doc/qt-5/qml-qtquick-item.html) qml-файла создаётся дерево QQuickItem (http://qt-project.org/doc/qt-5/qquickitem.html) в С++, которые QObject со всеми сигналами, слотами и прочими финтифлюшками. Основная работа идёт с деревом QQuickItem. На эту тему можно посмотреть классы QQmlEngine (http://qt-project.org/doc/qt-5/qqmlengine.html) и QQmlComponent (http://qt-project.org/doc/qt-5/qqmlcomponent.html). Так что так уж сильно тормозить не должно. Зависеть будет от количества элементов, организации их взаимодействия и пониманием тонкостей работы QML.

Самому парсить QML смысла не вижу. С таким же успехом можно парсить json, например, что легче будет. Фишка QML в том, что описание структуры элементов сочетается с возможностью определения действий над ними. Если в qml-файле определить только структуру элементов, без взаимодействия на javascript, то после загрузки этого файла стандартным образом можно обращаться к этой структуре из С++ без всяких интерпретаторов. Но некоторые действия лучше на javascript в qml-файле определить, чем в С++ с ними корячиться :).


Название: Re: QML, нужно ли?
Отправлено: RSATom от Октябрь 17, 2014, 07:38
В последних версиях Qt QML при реализации своих компонент есть возможность опуститься непосредственно до OpenGL ES 2.0. Это конечно не совсем тривиально, но возможно. Тем самым можно совместить удобство QML с возможность использования OpenGL по полной программе, без оглядки на возможности существующих Qt Quick элементов. Я делал это однажды (но задача была относительно простой), если интересно могу дать ссылку на исходники (github)


Название: Re: QML, нужно ли?
Отправлено: deMax от Октябрь 21, 2014, 10:49
Да интересно, самое главное вопрос производительности.


Название: Re: QML, нужно ли?
Отправлено: RSATom от Октябрь 21, 2014, 13:44
https://github.com/RSATom/QmlVlc

то что непосредственно связано с низкоуровневой отрисовкой:
https://github.com/RSATom/QmlVlc/blob/master/QmlVlcVideoSurface.h
https://github.com/RSATom/QmlVlc/blob/master/QmlVlcVideoSurface.cpp
https://github.com/RSATom/QmlVlc/blob/master/SGVlcVideoNode.h
https://github.com/RSATom/QmlVlc/blob/master/SGVlcVideoNode.cpp

здесь QmlVlcVideoSurface - это интерфейс для использования в Qml, SGVlcVideoNode - низкоуровневый отрисовщик.


можно посмотреть как это все работает "в живую":
https://sourceforge.net/projects/WebChimera - плагин для браузера базирующийся на вышеупомянутой библиотеке.
http://rsatom.github.io/WebChimera - несколько демок для него.

ну и в десктоп варианте можно собрать через это:
https://github.com/RSATom/QmlVlcDemo


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 21, 2014, 19:58
Избежать тормозов может помочь знание внутренней кухни рендеринга QML, например Qt Quick Scene Graph Renderer (http://doc-snapshot.qt-project.org/qt5-5.3/qtquick-visualcanvas-scenegraph-renderer.html).
В моём проекте на qml/js перенесена тонна логики, используются шейдер эффекты, динамическая загрузка компонентов и прочие плюшки. Могу с уверенностью сказать, что qtquick не тормозит почти ни при каких условиях. Но если на машине проблемы с поддержкой OpenGL - будет тяжко. (я кэп).
(соединение с данными напрямую, биз сигналов и слотов)
В qml Вы можете использовать ссылки и вызывать функции напрямую, минуя систему сигналов.

ибо QML-вские view сортировку не поддерживают.
С чего бы view поддерживать сортировку, если она должна выполняться в моделях?


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Октябрь 21, 2014, 20:31
С чего бы view поддерживать сортировку, если она должна выполняться в моделях?

Почему должна?


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 21, 2014, 20:53
Почему должна?
Архитектурно - модели определяют сами данные и их порядок, а view их только отображают в нужном представлении, используя делегаты. Почему именно так - вопрос к разработчикам qt, но я с их решением вполне согласен.


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Октябрь 21, 2014, 21:04
Архитектурно - модели определяют сами данные и их порядок, а view их только отображают в нужном представлении, используя делегаты.

Почему сортировка не является одним из методов отображения данных? Как раз является. Просто разработчики на данный момент заставляют нас сортировать самим через промежуточную модель.


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 21, 2014, 21:35
Почему сортировка не является одним из методов отображения данных? Как раз является. Просто разработчики на данный момент заставляют нас сортировать самим через промежуточную модель.
Зачем тебе промежуточная модель, если ты можешь реализовать сортировку в изначальной? И зачем тебе сортировка на этапе view, если реализация сортировки на этапе model гарантирует, что любой view будет отображать элементы в этой сортировке? (А иначе же не факт, что view будет поддерживать нужную сортировку).
Тут даже обсуждать нечего, предлагаю закончить оффтоп, а Вам пойти и составить багрепорт, если читаете свою позицию верной.


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Октябрь 21, 2014, 22:23
И зачем тебе сортировка на этапе view, если реализация сортировки на этапе model гарантирует, что любой view будет отображать элементы в этой сортировке?

Мне это не нужно и даже вредно. Думаю, что принудительно сортировать исходную модель без промежуточной - вообще bad design. Это исключает несколько view для одной и той же модели, которые сортируют по-разному (как есть у меня).

Тут даже обсуждать нечего, предлагаю закончить оффтоп, а Вам пойти и составить багрепорт, если читаете свою позицию верной.

Возможно.


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 21, 2014, 23:08
Мне это не нужно и даже вредно. Думаю, что принудительно сортировать исходную модель без промежуточной - вообще bad design. Это исключает несколько view для одной и той же модели, которые сортируют по-разному (как есть у меня).
Исключает - определенно, но плохой ли это дизайн - не думаю. В большинстве случаев модель не должна являться изначальным источником/контейнером данных, её задача - представить данные в уже готовом для отображения виде. Например, если Вы используете ListModel для формирования списка, потом еще одну ListModel для фильтрации/сортировки первого, то Вам стоит вместо первого ListModel использовать обычный яваскрипт массив.
При такой концепции, кончено, на каждый view нужно создавать по экземпляру модели. Фильтрация при этом реализуется в классе модели, но параметры фильтрации могут задаваться для каждого экземпляра свои.


Название: Re: QML, нужно ли?
Отправлено: Alex Custov от Октябрь 21, 2014, 23:22
Исключает - определенно, но плохой ли это дизайн - не думаю. В большинстве случаев модель не должна являться изначальным источником/контейнером данных, её задача - представить данные в уже готовом для отображения виде.

В терминах MVC модель - это как раз склад данных. Их отображением занимается view. Об отображении модель ничего не знает, и поэтому не может в общем виде как-то подготовить данные для него. Можно конечно на это всё забить, и сортировать модель напрямую, но это уже будет не MVC, а что-то другое.

Например, если Вы используете ListModel для формирования списка, потом еще одну ListModel для фильтрации/сортировки первого

А зачем тут второй ListModel? Я забыл ещё, что ещё одна проблема в том, что в QML нет сортирующей модели типа QSortFilterProxyModel, и поэтому по-правильному модель придётся переместить в C++, и использовать QSortFilterProxyModel. Именно это я имел ввиду, когда говорил о промежуточной модели (у меня модель и так в С++, поэтому для меня это получилось очевидно).


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 22, 2014, 12:25
Избежать тормозов может помочь знание внутренней кухни рендеринга QML, например Qt Quick Scene Graph Renderer (http://doc-snapshot.qt-project.org/qt5-5.3/qtquick-visualcanvas-scenegraph-renderer.html).
В моём проекте на qml/js перенесена тонна логики, используются шейдер эффекты, динамическая загрузка компонентов и прочие плюшки. Могу с уверенностью сказать, что qtquick не тормозит почти ни при каких условиях. Но если на машине проблемы с поддержкой OpenGL - будет тяжко. (я кэп).
В моём проекте, например, ползают муравьи. Над каждым из них прямоугольник с текстовой информацией, которая может меняться несколько раз в секунду. Прямоугольники с текстом полупрозрачные. Муравьёв пускай будет тысяч пять. При таких условиях QtQuick не будет тормозить? Проблем с поддержкой OpenGL на машине нет.

И да, я хочу на экране видеть всех муравьёв одновременно. И прямоугольники с актуальной информацией над каждым. Ибо каждый муравьишка дорог моему сердцу, и я не хочу никого обделять своим вниманием :).


Название: Re: QML, нужно ли?
Отправлено: RSATom от Октябрь 22, 2014, 13:29
На всякий случай: под винду существует сборка Qt5 с Angle Lib, с которой нет необходимости в OpenGL - т.к. в runtime осуществляется трансляция вызовов в DirectX. Но по накладным расходам такого решения ничего сказать не могу...


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 22, 2014, 16:55
В моём проекте, например, ползают муравьи. Над каждым из них прямоугольник с текстовой информацией, которая может меняться несколько раз в секунду. Прямоугольники с текстом полупрозрачные. Муравьёв пускай будет тысяч пять. При таких условиях QtQuick не будет тормозить? Проблем с поддержкой OpenGL на машине нет.

И да, я хочу на экране видеть всех муравьёв одновременно. И прямоугольники с актуальной информацией над каждым. Ибо каждый муравьишка дорог моему сердцу, и я не хочу никого обделять своим вниманием :).
Это не сложно проверить.
Код:
import QtQuick 2.2

Rectangle {
    id: root
    width: 800
    height: 800

    Component {
        id: termitClass
        Rectangle {
            id: termit
            height: 10
            width: 30
            color: "green"
            opacity: 0.5
            property bool textFlag: true
            property real dx: 0
            property real dy: 0
            property int interval: 400

            Text {
                anchors.centerIn: parent
                text: (textFlag) ? "Муравей" : "Я бегу"
                font.pixelSize: 6
                color: "white"
            }

            Timer {
                interval: termit.interval
                onTriggered: termit.move();
                running: true
                repeat: true
            }

            Timer {
                interval: 5000
                onTriggered: termit.check();
                running: true
                repeat: true
            }

            function move() {
                termit.x = termit.x+dx;
                termit.y = termit.y+dy;
                textFlag = !textFlag;
            }

            function check() {
                termit.dx = termit.dx*-1;
                termit.dy = termit.dy*-1;
            }
        }
    }

    Component.onCompleted: {
        for (var i=0; i<5000; i++) {
            var nx = Math.random()*root.width;
            var ny = Math.random()*root.height;
            var interval = Math.random()*400+200;
            termitClass.createObject(root, {"x": nx, "y": ny, "dx": Math.random()*4-2, "dy": Math.random()*4-2, "interval": interval});

        }
    }
}
Вообщем-то, лагать у меня начинает начиная с 20003000 штук, на 5 тысячах снижается фпс, но картинка остаётся вполне себе интерактивной. Да, текст перерисовывается раз в несколько секунд, как и просили, и именно на его отрисовку уходит большая часть ресурсов. И это на интегрированной видеокарте, производительность которой оставляет желать лучшего.
Моё мнение - qml с задачей вполне справился.


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 22, 2014, 18:57
Хотя бы координаты муравьишки выводите :). И интерактивности немного добавить. Так, например:
Код:
import QtQuick 2.3
import QtQuick.Controls 1.2

ApplicationWindow {
    visible: true
    width: 800
    height: 800
    title: qsTr("Hello World")

    menuBar: MenuBar {
        Menu {
            title: qsTr("File")
            MenuItem {
                text: qsTr("&Open")
                onTriggered: console.log("Open action triggered");
            }
            MenuItem {
                text: qsTr("Exit")
                onTriggered: Qt.quit();
            }
        }
    }

    Rectangle {
        id: root
        width: 800
        height: 800
        anchors.centerIn: parent
        color: "grey"

        Component {
            id: termitClass
            Rectangle {
                id: termit
                height: 20
                width: 80
                color: "green"
                border.color: "black"
                clip: true
                opacity: 0.5
                property bool textFlag: true
                property real dx: 0
                property real dy: 0
                property int interval: 400

                Text {
                    id: termitInfo
                    anchors.centerIn: parent
                    //text: (textFlag) ? "Муравей" : "Я бегу"
                    font.pixelSize: 10
                    color: "white"
                }

                Timer {
                    interval: termit.interval
                    onTriggered: termit.move();
                    running: true
                    repeat: true
                }

                Timer {
                    interval: 5000
                    onTriggered: termit.check();
                    running: true
                    repeat: true
                }

                function move() {
                    termit.x = termit.x+dx;
                    termit.y = termit.y+dy;
                    textFlag = !textFlag;
                    termitInfo.text = "x:" + x.toFixed(2) + " y:" + y.toFixed(2);
                }

                function check() {
                    termit.dx = termit.dx*-1;
                    termit.dy = termit.dy*-1;
                }
            }
        }

        Component.onCompleted: {
            for (var i=0; i<5000; i++) {
                var nx = Math.random()*root.width;
                var ny = Math.random()*root.height;
                var interval = Math.random()*400+200;
                termitClass.createObject(root, {"x": nx, "y": ny, "dx": Math.random()*4-2, "dy": Math.random()*4-2, "interval": interval});

            }
        }

    }

    MouseArea {
        anchors.fill: parent
        onWheel: {
            if (wheel.angleDelta.y > 0)
            {
                root.width += 10;
                root.height += 10;
            }
            else
            {
                root.width -= 10;
                root.height -= 10;
            }
        }
    }
}

Насколько быстро такой вариант работает? Для непритязательных может и пойдёт, но для меня задержка в 1 секунду на действие пользователя неприемлема. Надеюсь Вы понимаете, что в реальном проекте намного больше требований по функциональности, а не просто прямоугольники с текстом. Там много чего ещё должно делаться, и помимо графики. И чтобы 1000 муравьёв в готовом приложении бегали с приемлемой скоростью, 5000 из наших примеров должны просто летать :).


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 22, 2014, 20:20
Надеюсь Вы понимаете, что в реальном проекте намного больше требований по функциональности, а не просто прямоугольники с текстом.
Наоборот, требования к отрисовке такого количества объектов с таким количеством обновлений в секунду чуть более чем избыточны, их вполне можно считать нагрузочным тестированием. В реальном проекте Вы нигде такого не встретите.
Впрочем, пожалуй просто предложу вкинуть сюда пример, в котором другая технология/фреймворк/что либо еще справится с этой задачей лучше, да еще и будет способна построить полноценный интерфейс при этом без задействования для этих целей огромного штата сотрудников (т.е. ассемблер не предлагать).

Цитировать
Там много чего ещё должно делаться, и помимо графики. И чтобы 1000 муравьёв в готовом приложении бегали с приемлемой скоростью, 5000 из наших примеров должны просто летать :).
Это уже другой вопрос, тут речь идет именно о производительности графики. Поскольку графику тут отрисовывает видеокарта - заботиться о том, что реализация функционала сильно повлияет на производительность этой самой графики не приходится.


Название: Re: QML, нужно ли?
Отправлено: deMax от Октябрь 27, 2014, 10:42
Наоборот, требования к отрисовке такого количества объектов с таким количеством обновлений в секунду чуть более чем избыточны, их вполне можно считать нагрузочным тестированием. В реальном проекте Вы нигде такого не встретите.
У меня 800 значков с текстом в рамочках и залитый картинкой и другой графики хватает, вроде все вертится нормально.

Надо попробовать сравнить FPS у QML с QPainter.
Сделал на QPainter:
Код:
painEvent...{
    QPainter p(this);
    p.setOpacity(0.5);
    p.setBrush(Qt::green);
    for(int i=0; i<800; i++) {
        p.drawRect(0,0,80,20);
        p.drawText(QRect(0,0,80,20),"FPS: 100500"); }
    fpsCounter++;
    p.drawText(50,50,QString::number(fps));}

итого: fps 22(cpu 30%) - да прямоугольник неподвижный но это не критично
Поставил в вашем примере с муравьями 800 объектов с аналогичным текстом: fps 35(cpu 46%)
таймеры в обоих случаях поставил 10ms


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 27, 2014, 12:11
Наоборот, требования к отрисовке такого количества объектов с таким количеством обновлений в секунду чуть более чем избыточны, их вполне можно считать нагрузочным тестированием. В реальном проекте Вы нигде такого не встретите.
Впрочем, пожалуй просто предложу вкинуть сюда пример, в котором другая технология/фреймворк/что либо еще справится с этой задачей лучше, да еще и будет способна построить полноценный интерфейс при этом без задействования для этих целей огромного штата сотрудников (т.е. ассемблер не предлагать).
Если Вы такие проекты не встречали, это не значит, что их нет :). Я, кстати, изначально как раз и говорил о том, что QML можно использовать с такими проектами. Только нужно понимать, для чего предназначен QML, его возможности и тонкости работы, для эффективного использования. В примере моей задачки использовать QML "в лоб"  для отображения 5000 элементов будет тяжеловато, но можно встроить собственный рендеринг этих элементов в существующий интерфейс на QML.

В качестве "тонкостей работы" можно, например, отметить такую вещь: если в моём примере убрать "clip: true", то всё начинает работать шустрее. В QML есть ещё такая очень удобная штука как Property Binding (http://qt-project.org/doc/qt-5/qtqml-syntax-propertybinding.html), но её следует использовать с осторожностью в случае большого числа элементов и их связей. QQuickItem сам по себе достаточно объёмный в плане памяти объект, большое их количество будет прилично кушать эту память. И ещё много всякого подобного.

Цитировать
Там много чего ещё должно делаться, и помимо графики. И чтобы 1000 муравьёв в готовом приложении бегали с приемлемой скоростью, 5000 из наших примеров должны просто летать :).
Это уже другой вопрос, тут речь идет именно о производительности графики. Поскольку графику тут отрисовывает видеокарта - заботиться о том, что реализация функционала сильно повлияет на производительность этой самой графики не приходится.
Видеокарта, конечно, штука мощная и со свой задачей справляется на все 100%, но данные для неё готовит CPU. Так что и загруженный функционал будет влиять на частоту отрисовки, и тормозной рендеринг сцены будет влиять на функционал.


Название: Re: QML, нужно ли?
Отправлено: Отражение луны от Октябрь 27, 2014, 12:32
Если Вы такие проекты не встречали, это не значит, что их нет :).
Если подойти к этой проблеме с другой стороны - человеческий мозг не способен обрабатывать такое количество обновлений, построение такого рода интерфейса является плохим решением, поскольку такое количество информации, очевидно, нуждается в автоматизированной её обработке и более структурированном отображении)

Цитировать
В качестве "тонкостей работы" можно, например, отметить такую вещь: если в моём примере убрать "clip: true", то всё начинает работать шустрее.
На мой взгляд документированный атрибут класса не относится к тонкостям работы. В документации вполне явно указано, где его стоит использовать, а где - нет. http://qt-project.org/doc/qt-5/qtquick-performance.html#clipping
Вообщем-то с биндингами то же самое.


Название: Re: QML, нужно ли?
Отправлено: ViTech от Октябрь 27, 2014, 13:16
Если подойти к этой проблеме с другой стороны - человеческий мозг не способен обрабатывать такое количество обновлений, построение такого рода интерфейса является плохим решением, поскольку такое количество информации, очевидно, нуждается в автоматизированной её обработке и более структурированном отображении)
Я с этим тоже согласен, но если в ТЗ требуется отображение тысяч муравьёв с информацией одновременно, значит их надо выполнять :). Автоматизированная обработка может сочетаться с визуальным отображением всей этой какофонии: неинтересных муравьёв можно отображать менее заметно, интересных - выделять. Можно детализировать выводимую информацию в зависимости от различных условий и настроек. Но предельный случай должен работать с заданными требованиями по быстродействию. QML, в данном случае, с этим не справляется. Но он для этого и не предназначен. Вот воспользоваться плюшками QML и встроить в его интерфейс свой рендеринг - привлекательная возможность :).

На мой взгляд документированный атрибут класса не относится к тонкостям работы. В документации вполне явно указано, где его стоит использовать, а где - нет. http://qt-project.org/doc/qt-5/qtquick-performance.html#clipping
Вообщем-то с биндингами то же самое.
Я, в общем-то, тоже об этом :). Не все сразу на такие разделы документации попадают, тем подобные темы и ценны.

итого: fps 22(cpu 30%) - да прямоугольник неподвижный но это не критично
Поставил в вашем примере с муравьями 800 объектов с аналогичным текстом: fps 35(cpu 46%)
таймеры в обоих случаях поставил 10ms
В приведённой выше ссылке, в начале, заявлены цели для быстродействия графики, так что есть к чему стремиться :).