LINUX.ORG.RU
ФорумTalks

Аппаратное ускорение элементов интерфейса Qt: QWidget vs. QML

 , , ,


0

2

Мне не нравится как работает QListWidget на Андроиде.
Он лагает, тупит и вообще пользоваться им неприятно.
Гугление показало, что QWidget никаким образом не использует аппаратное ускорение прорисовки, а вот QML, говорят, использует и обычно чувствуется плавнее и шустрее.

Я всё правильно понял?
Если да, то что теперь делать? Обмазываться QML'ем?
И если да, то вообще почему? Почему QML рисует используя аппаратный ускоритель, а QWidgets рендерится софтварно. Этому есть причина или это «исторически сложилось»?

Или я всё неправильно понял и всё не так уж и плохо и исправимо?

Deleted

Если да, то что теперь делать? Обмазываться QML'ем?

Да, без вариантов, сам пострадал из-за этого, сижу изучаю QML...
Причина одна: ББ(откат фунциональности), пока мы переписываем, он рубит бабосы и ржёт над нами.

xwicked ★★ ()

Потому что Qt плавно съезжает на QML, а классические виджеты поддерживаются по остаточному принципу.

Sadler ★★★ ()

QWidgets рендерится софтварно

Разве? Когда я его последний раз тыкал, оно рендерилось через OpenGL и (под онтопиком) впринцыпе не запускалось без проприетарных дров, жалуясь что не может создать контекст OpenGL (или что-то в этом роде).

RiseOfDeath ★★★★ ()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Ответ на: комментарий от Sadler

Написание GUI и так мерзкая и неблагодарная работа, так они ещё и усугубляют ситуацию.

Deleted ()
Ответ на: комментарий от RiseOfDeath

Наверное OpenGL нужен был для чего-то ещё. Сам QWidget рендерится программно.

Deleted ()

Если да, то что теперь делать? Обмазываться QML'ем?

Можно обмазываться стандартными API для Android, а не вкорячивать Qt туда и потом по каждому чиху дёргать за Java через JNI.

Мне не нравится как работает QListWidget на Андроиде.

QtWidgets ВООБЩЕ никогда не предназначались и не позиционировались для работы на Android. Поэтому проблем там вагон и маленькая тележка.

Почему QML рисует используя аппаратный ускоритель, а QWidgets рендерится софтварно.

Потому то QtWidgets в идеале должен использовать стандартные средства отрисовки, а QML это всегда «кастомный» интерфейс.

Переходя на QML ты получаешь рисовку через GPU, но так же и получаешь тормозящий интерпретатор вебни (JavaScript) который любит ЖРАТ CPU и RAM маломощных девайсов.

Потыкай QtQuick/QML, но вообще лучше переходить на стандартные Android API и Java: будет быстрее, компактнее да и холодный запуск приложения будет практически мгновенным, а не 3-4 секунды, как в случае QtQuick. Количество программ на QtQuick/QML в Google Play позволяет оценить всю готовность этой технологии.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

но вообще лучше

Android для меня не является целевой платформой и я пишу под него по остаточному принципу. Если бы не Qt, то я вообще бы не смотрел в сторону этого Ява-царства.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от RiseOfDeath

Разве? Когда я его последний раз тыкал, оно рендерилось через OpenGL и (под онтопиком) впринцыпе не запускалось без проприетарных дров, жалуясь что не может создать контекст OpenGL (или что-то в этом роде).

QtWidgets всегда работал программно через иксы. Можно запустить с ускорением:

$ любая_программа_qt_или_kde -platform eglfs

Но это больше для KIOSK-решений и Embedded.

EXL ★★★★★ ()
Ответ на: комментарий от Deleted

Android для меня не является целевой платформой и я пишу под него по остаточному принципу.

Вот и QtWidgets для Android OS не является целевой платформой и The Qt Company сделали порт по остаточному принципу.

Так что решения всего три:

1. Забить вообще и что есть - то есть.
2. Поковырять QML/JavaScript и если понравится, прикрутить к своей программе QtQuick-интерфейс, жирно обмазав всё прослойками Qt/C++ <=> QML и JNI <=> C++.
3. Грамотно реорганизовать свою программу так, чтобы к ней можно было написать интерфейс на любом фреймворке или тулките (долго, нудно и так надо было начинать сразу).

EXL ★★★★★ ()
Ответ на: комментарий от EXL

и так надо было начинать сразу

Да оно так и есть — интерфейс просто передаёт параметры в методы C++ класса и отображает результат.

Поковырять QML/JavaScript и если понравится

Да мне уже не нравится эта вебятина.

что есть - то есть

То что есть — не очень хорошо даже по моим наплевательским меркам.

The Qt Company сделали порт по остаточному принципу.

И чем твоя язвительность мне поможет?

Deleted ()

А бы на андроиде использовал стандартные средства разработки.

rumgot ★★★★★ ()
Ответ на: комментарий от Deleted

И чем твоя язвительность мне поможет?

А где здесь язвительность? Это просто констатация факта. Я тоже в своё время попробовал QtWidgets и QtQuick на Android OS, поплевался вот как ты сейчас, и сделал нативненько.

Ну не дорабатывать же порт QtWidgets на Android до приемлемого уровня в одиночку, в самом деле? Хотя этим занимались ребята из 2GIS, кстати можешь попробовать посмотреть их наработки:

https://gitlab.com/2gisqtandroid

В конце концов они ушли практически полностью в вебню.

Да оно так и есть — интерфейс просто передаёт параметры в методы C++ класса и отображает результат.

Ну раз так, то вообще замечательно: бери ядро своей программы на C++, компилируй под Android в виде нативной либы, прокидывай нужные методы в Java-часть через JNI и пиши красивый интерфейс на стандартных средствах, которые уже с поддержкой всякого там Material Design, высокого DPI и прочего.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)

Во-первых, ты не прав. У Qt есть бэкенды отрисовки. И на ПК виджеты юзают OpenGL по возможности.

Во-вторых, Qt/Android — недоделанная хрень, в которой сам QML не в лучшем состоянии, что уж говорить о виджетах.

a1batross ★★★★★ ()
Ответ на: комментарий от EXL

Qt/C++ <=> QML и JNI <=> C++

я как-то делал все это. проклял нахрен все, и написал на Java, получилось быстрее во всех смыслах. В общем не советую

dib2 ★★★★★ ()
Ответ на: комментарий от EXL

В конце концов они ушли практически полностью в вебню.

Насколько я помню, их Android приложение имеет интерфейс на QML.

CrossFire ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.