Задать вопрос

Как лучше перейти на Qml?

Добрый день.

Есть достаточно большой проект, написанный на Qt. Используются виджеты Qt.
Сейчас встала задача сделать мобильные версии данной программы. Я так понял, что надо уходить с QtWidgets на QML. Подскажите пожалуйста ответы на следующие вопросы (кто реально сталкивался с такими задачами).

1. Стоит ли писать универсальное приложение, которое масштабируется в зависимости от размера экрана? Или же сделать отдельный Qml проект и использовать частично кодовую базу существующего приложения?

2. Как быть с разными размерами экрана? Ведь разрешение планшета явно больше чем телефона. Как решается вопрос? Определять параметры экрана на старте, а потом грузить нужный интерфейс?

3. В программе достаточно большое количество кастомных виджетов, которые рисуют разные специфические диаграммы, графики и т.д. Как их портировать под QML? Можно ли туда вставить то что есть или переписывать с нуля на Javascript?

4. Есть ли opensource проекты похожего плана (многоплатформенное приложение на qml) чтобы посмотреть как оно на самом деле правильно делается?

5. Убрали ли ограничение на статическую линковку при постинге в App Store? То есть, можно ли коммерческое приложение, слинкованное динамически с Qt туда отправить? Вроде как раньше было нельзя.

Заранее спасибо за ответы.
  • Вопрос задан
  • 1247 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
Zifix
@Zifix Куратор тега Qt
Barbatum
1) Поддерживать две ветки одного и того же кода, добавлять фичи два раза — не лучшая идея, так что надо переходить целиком.

2) Дело не в разрешении, а именно в физическом размере экрана, нужно подгружать разную компоновку на разных размерах

3) Вставлять как есть идея плохая, лучше все-таки портировать. Но если они рисуются через QPainter, то проблема не большая, и можно через что-нибудь вроде doc.qt.io/qt-5/qquickpainteditem.html использовать.

4) blog.qt.io/blog/2013/12/10/cross-platform-applicat...

5) ЕМНИП начиная с iOS 8 динамическая линковка работает, но и со статикой ограничения нет, лицензия не запрещает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BlackRaven86
@BlackRaven86
Программист
1-2. Современный способ масштабирования в Qt - это использовать AA_EnableHighDpiScaling. С виджетами и большинством QML-компонетов (но не всеми!) должно работать. Технология еще пока новая, так что стоит проверять и писать багрепорты, если что-то работает не так.

И вот тут есть одна проблема с QML: набор компонентов, которые выглядят как виджеты (т.е. QtQuick Controls 1) не поддерживает новое масштабирование. Новая библиотека QtQuick Controls 2 поддерживает масштабирование, но там контролы мобильные, с соответствующим видом. Так что если на десктопе обязательно нужны контролы, которые выглядят как виджеты, то есть смысл на десктопе оставить интерфейс на виджетах, а для мобильных устройств сделать уже интерфейс на QML.

3. Можно рисовать на QML, используя Canvas, а можно и на C++ при помощи Scene Graph. Посмотрите код Qt Charts, насколько я понял, оно изначально под виджеты было заточено, но рисует графики и в QML. Впрочем, когда я ее тестировал, оно работало медленнее, чем моя реализация на Canvas :)

5. Насколько я знаю, в Qt поддержка еще в процессе интеграции. Здесь есть еще один нюанс: привила AppStore не очень совместимы с копилефтными лицензиями, так что коммерческая лицензия будет наиболее надежным выбором.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы