Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QML vs QWidget's
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt инструментарий
I_Wanna_Know
Доброго времени суток Комрады!
прошу не пинайте меня - ленивую сволочь за то, что не сильно гуглил эту тему :-) Просто хочется услышать мнение живых людей по сабжу:

Собсно сабж в том, что прошёл слушок, мол в Qt5 нужно слезать с QWidget's и переходить на QML т.к. в будущем по заверениям будет развиваться именно QML

Поэтому прошу пожалуйста проясните ситуацию:

  • Что из этого производительнее (легковестне) ?
  • Как в QML вообще обстоит дело с 2D графикой? и обстоит ли оно там вообще ?
    • Есть ли в QML что то типа QPainter? QGraphicsObject и QGrarphicsScene ?
    • Где удобнее рисовать\работать с графическими объектами\элементами? в QML или QWidget
    • Что предоставляет больше функционала? то же обнаружение коллизий \ отслеживания изменения координат ну и т.п.
  • Вообще считаете ли вы технолохию QML "сырой"? или наоборот?
  • Вообще на сколько удобна связка QML + С++ ?



Вообщем хочется знать нахрена весь этот сыр бор затеян с этим QML , чем их не устраивал QWidget?
I_Wanna_Know
Неужели никто не знает?!
ahalaj
IMHO сравнивать QWidget's и QML так же "лепо", как сравнивать тёплое с мягким или мокрое с высоким, абсолютно несовместимые понятия.
marsel
Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Собсно сабж в том, что прошёл слушок, мол в Qt5 нужно слезать с QWidget's и переходить на QML т.к. в будущем по заверениям будет развиваться именно QML

Ну это в принципе ответ на вопрос о том стоит ли переходить или нет.
Когда придёт Qt6 и QML доработают до функционала QWidget's, скорее всего виджеты выкинут.
Поэтому QML это неизбежно(если конечно ещё что-нибудь не придумают :) ). Поэтому лучше не затягивать с изучением.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Что из этого производительнее (легковестне) ?

По производительности, если конечно не перегружать javascript кодом, должно быть не хуже.
Так как элементы в QML это по сути плюсовые объекты от наследованные от класса QQuickItem.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Есть ли в QML что то типа QPainter? QGraphicsObject и QGrarphicsScene ?

Можно создавать кастомные элементы. Надо в с++ части создать класс отнаследованный от QQuickPaintedItem и переопределить метод paint.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Где удобнее рисовать\работать с графическими объектами\элементами? в QML или QWidget

На QML конечно удобнее работать с графическими элементами, он для этого и сделан.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Что предоставляет больше функционала? то же обнаружение коллизий \ отслеживания изменения координат ну и т.п.

Честно не до конца понял, что имеется в виду.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Вообще считаете ли вы технолохию QML "сырой"? или наоборот?

Да QML (QtQuick 2) ещё конечно молодая технология и всяких бяк хватает.

Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Вообще на сколько удобна связка QML + С++ ?

Вообще довольно удобно, потому что получается чёткое разделение бизнес-логика в с++ части, а интерфейс в QML.
I_Wanna_Know
marsel большое спасибо за развёрнутый ответ :clapping:

Цитата(marsel @ 17.9.2014, 11:52) *
Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Что предоставляет больше функционала? то же обнаружение коллизий \ отслеживания изменения координат ну и т.п.

Честно не до конца понял, что имеется в виду.

Я имею в виду методы для работы с графическими примитивами например: скалирование, трансформация( в том числе и Rotate() )
или вот конкретная функция для обнаружения коллизий(столкновений между графическими примитивами) http://www.doc.crossplatform.ru/qt/4.4.3/q...ollidesWithItem

Т.е. вот например хочу я написать на C++ классическую игру "жизнь", где нужно отрисовывать большое количество графических объектов движущихся по сложному алгоритму, что мне лучше использовать? QML или QWidgets при условии того, что я хочу хорошую производительность и отсутствие геморроя при написании GUI?
marsel
Цитата(I_Wanna_Know @ 17.9.2014, 13:06) *
Я имею в виду методы для работы с графическими примитивами например: скалирование, трансформация( в том числе и Rotate() )
или вот конкретная функция для обнаружения коллизий(столкновений между графическими примитивами) http://www.doc.crossplatform.ru/qt/4.4.3/q...ollidesWithItem

У Item (базовый тип для всех визуальных элементов в QML), есть методы - scale, rotation, transform.
Также имеется целая куча анимаций изменения различных состояний http://qt-project.org/doc/qt-5/qtquick-qmltypereference.html
На счёт обнаружения коллизий не знаю, не доводилось применять.

Цитата(I_Wanna_Know @ 17.9.2014, 13:06) *
Т.е. вот например хочу я написать на C++ классическую игру "жизнь", где нужно отрисовывать большое количество графических объектов движущихся по сложному алгоритму, что мне лучше использовать? QML или QWidgets при условии того, что я хочу хорошую производительность и отсутствие геморроя при написании GUI?

Тут я не могу ничего посоветовать, так как сам не писал такие вещи.
По идее QML для этого больше приспособлен, но насколько там будет меньше или больше проблем, хз.
Litkevich Yuriy
Цитата(I_Wanna_Know @ 12.9.2014, 22:47) *
Что из этого производительнее (легковестне) ?
Уже была тема на форуме


Цитата(I_Wanna_Know @ 17.9.2014, 15:06) *
скалирование
что это такое?
ahalaj
Цитата(Litkevich Yuriy @ 19.9.2014, 12:10) *
Цитата(I_Wanna_Know @ 17.9.2014, 15:06) *
скалирование
что это такое?

Наверное имеется в виду масштабирование, то, что делает QPainter::scale
I_Wanna_Know
Цитата(ahalaj @ 19.9.2014, 13:06) *
Цитата(Litkevich Yuriy @ 19.9.2014, 12:10) *
Цитата(I_Wanna_Know @ 17.9.2014, 15:06) *
скалирование
что это такое?

Наверное имеется в виду масштабирование, то, что делает QPainter::scale

Да именно это и имел в виду
exio
Цитата(I_Wanna_Know @ 17.9.2014, 13:06) *
marsel большое спасибо за развёрнутый ответ :clapping:

Цитата(marsel @ 17.9.2014, 11:52) *
Цитата(I_Wanna_Know @ 12.9.2014, 20:47) *
Что предоставляет больше функционала? то же обнаружение коллизий \ отслеживания изменения координат ну и т.п.

Честно не до конца понял, что имеется в виду.

Я имею в виду методы для работы с графическими примитивами например: скалирование, трансформация( в том числе и Rotate() )
или вот конкретная функция для обнаружения коллизий(столкновений между графическими примитивами) http://www.doc.crossplatform.ru/qt/4.4.3/q...ollidesWithItem

Т.е. вот например хочу я написать на C++ классическую игру "жизнь", где нужно отрисовывать большое количество графических объектов движущихся по сложному алгоритму, что мне лучше использовать? QML или QWidgets при условии того, что я хочу хорошую производительность и отсутствие геморроя при написании GUI?


Я использовал по долгу службы QML в электронном учебнике.
По производительности QML скажу так:
1)QML - это прекрасный инструмент для быстрого написания форм любого вида. Каким бы сложным и нестандартным не был дизайн интерфейса, Вы сможете быстро реализовать его при помощи QML.
После первичной компиляции QML файла, форма будет работать быстро.
2)В QML удобно реализовывать списки. Вам не нужно писать кучу кода для того, чтобы нарисовать красивые элементы списка.
3)QML не предназначен для работы с большим количеством примитивов. Тысячи item ов это для него большая проблема, т.к. тратится время и на отрисовку и на работу сигнально-слотовой системы.
Чтобы вывести для примера тысячу анимированных смайлов, придется использовать сторонний 3д движок и оборачивать его вывод в отдельный Item, тогда все будет ок.
4)среда QML - это не хранилище данных. Если в js запихать большой массив с данными, то все будет жутко тормозить. В среду QML желательно подтягивать только то, что необходимо здесь и сейчас.

Опишу одну из реальных проблем, с которой столкнулись.
Нужно было сделать кастомную клавиатуру для андроид приложения.
Написали все на QML без использования плюсового кода.
Как дело дошло до профилирования и поиска узких мест выяснилось, что эта клавиатура кушает 500 мс на первичную загрузку.
Писать на с++ свой элемент не захотел. Сделал отложенную загрузку клавы, чтобы сэкономить пол секунды на первичную загрузку приложения.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2018 IPS, Inc.