Страницы

Поиск по вопросам

четверг, 19 марта 2020 г.

QML vs QPainter Widget - что производительнее?

#widgets #qt #cpp #qml


Собираясь разрабатывать новое приложение (на C++ и Qt), столкнулся перед выбором:
как реализовать интерфейс - на QML или сделать по старинке виджетами (будет виджет,
наследованный от QPainter на котором будут отрисовываться объекты да скроллироваться,
и еще несколько виджетов с различными текстовыми полями и кнопками). С QML у меня нет
никакого опыта, поэтому на виджетах я сделаю интерфейс намного быстрее. Однако, может
быть у QML есть какие-то плюсы по сравнению с традиционными виджетами? Так какие же?
Что из них производительнее?    


Ответы

Ответ 1



Вы пытаетесь сравнивать кислое с синим. Вот скажите мне, например, что производительнее - XML или Frostbite 2? QML - это удобный способ программировать виджеты, транзишны, разнообразные визуальные эффекты и стили оформления. Он парсится как язык, но в конечном счете отрисовывает то, что вы ему сообщили, с помощью того же самого QPainter'a: QML builds directly upon QGraphicsView, which in turn builds upon QPainter, which in turn builds upon QPaintEngine (and the internal QGraphicsSystem classes), which have various hardware accelerated implementations. Утверждается, что любой случай сложной разметки и логики на QML можно проэмулировать, вручную создавая элементы на QGraphicsView, и, соответственно, получить абсолютно одинаковую производительность.

Ответ 2



Вот, что мне ответили на Хабре: Насчёт производительности — разница только на старте, когда грузится и парсится QML. Далее на его основе создаются обычные «плюсовые» объекты в памяти, так что во время исполнения разницы не будет. А если ваш QML не супер-дупер навороченный, то вы и во время загрузки разницы не ощутите. Плюсы у QML — более компактное, более читабельное описание интерфейса, а также тот факт, что тенденция развития Qt однозначно идёт к QML. В Qt5 вроде бы от нативных виджетов понемногу отходят (тут врать не буду, возможно неправ).

Комментариев нет:

Отправить комментарий