crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QML vs QWidget's, поясните технологию, рисование? что производительнее?
I_Wanna_Know
  опции профиля:
сообщение 12.9.2014, 19:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 28.8.2014
Пользователь №: 4213

Спасибо сказали: 0 раз(а)




Репутация:   0  


Доброго времени суток Комрады!
прошу не пинайте меня - ленивую сволочь за то, что не сильно гуглил эту тему :-) Просто хочется услышать мнение живых людей по сабжу:

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

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

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



Вообщем хочется знать нахрена весь этот сыр бор затеян с этим QML , чем их не устраивал QWidget?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
I_Wanna_Know
  опции профиля:
сообщение 16.9.2014, 21:12
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 28.8.2014
Пользователь №: 4213

Спасибо сказали: 0 раз(а)




Репутация:   0  


Неужели никто не знает?!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 16.9.2014, 23:30
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


IMHO сравнивать QWidget's и QML так же "лепо", как сравнивать тёплое с мягким или мокрое с высоким, абсолютно несовместимые понятия.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
marsel
  опции профиля:
сообщение 17.9.2014, 10:52
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 29.1.2013
Пользователь №: 3693

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 17.9.2014, 12:06
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 28.8.2014
Пользователь №: 4213

Спасибо сказали: 0 раз(а)




Репутация:   0  


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
  опции профиля:
сообщение 18.9.2014, 9:25
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 29.1.2013
Пользователь №: 3693

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(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
  опции профиля:
сообщение 19.9.2014, 11:10
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(I_Wanna_Know @ 12.9.2014, 22:47) *
Что из этого производительнее (легковестне) ?
Уже была тема на форуме


Цитата(I_Wanna_Know @ 17.9.2014, 15:06) *
скалирование
что это такое?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 19.9.2014, 12:06
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 47
Регистрация: 14.6.2014
Пользователь №: 4166

Спасибо сказали: 13 раз(а)




Репутация:   1  


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

Наверное имеется в виду масштабирование, то, что делает QPainter::scale
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
I_Wanna_Know
  опции профиля:
сообщение 21.9.2014, 0:34
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 28.8.2014
Пользователь №: 4213

Спасибо сказали: 0 раз(а)




Репутация:   0  


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

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

Да именно это и имел в виду
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
exio
  опции профиля:
сообщение 31.10.2014, 15:23
Сообщение #10


Новичок


Группа: Новичок
Сообщений: 1
Регистрация: 31.10.2014
Пользователь №: 4265

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(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 мс на первичную загрузку.
Писать на с++ свой элемент не захотел. Сделал отложенную загрузку клавы, чтобы сэкономить пол секунды на первичную загрузку приложения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 13:53