Мобильное приложение на Qt Quick: возможности и перспективы

    Представим на минуту, что существует простая технология, позволяющая писать мобильные приложения под все платформы сразу. Без проблем с производительностью, с легким доступом к железу на низком уровне. Бесплатно*. Приложения выглядят почти как родные. Ведут себя как родные. Просто мечта, а не технология! «Так не бывает» — скажете вы. И будете правы. Почти. Но у сообщества есть отличный шанс изменить ситуацию, благо все предпосылки для этого есть. Если интересно, что уже сделано, и что еще предстоит — прошу под кат.

    * Печалит только юридическая неопределенность при статической линковке (LGPL), обязательной, например, под iOS

    Возможности


    Наверняка большинство разработчиков так или иначе слышало о Qt Quick. Если вкратце, то концепция создания интерфейсов заключается в построении визуального дерева из прямоугольных элементов, логика описывается на JavaScript. Доступны мощная машина состояний, куча разных анимаций, стандартные элементы вроде списков или областей ввода. То есть уже сегодня технология идеально подходит для кастомных интерфейсов типа терминалов оплаты или систем управления умного дома. Важнейшее преимущество — широкий охват платформ, начиная Android и заканчивая Tizen.

    Следующий ролик отлично демонстрирует текущие возможности библиотеки:


    Проблемы


    Возможно у некоторых даже возникали мысли попробовать написать какой-нибудь хобби-проект на этой новомодной штуке. Однако тут открывается сразу несколько проблем, которые только предстоит решить:

    Компоненты, точнее их полное отсутствие. Библиотека стандартных компонентов доступна только в ОС, использующих Qt Quick как базу:
    • MeeGo UI Components
    • Cascades by RIM
    • Ubuntu User Interface Toolkit
    • Jolla UI Components
    • Symbian UI Components
    • Plasma UI Components by KDE

    Документация: сейчас в интернете куча статей в стиле «Моё первое приложение на QML» или «Связываем C++ и QML», однако действительно полезных — единицы.

    Qt Quick 1.0: интернет переполнен нерабочим кодом, эта версия умерла не успев получить широкого распространения, зато оставила жирный след в истории.

    Поведение: понятно, что с некоторым усредненным приложением (как на видео выше) разберутся пользователи любой платформы, однако вряд ли будет приятно пользоваться таким вот пришельцем.

    Предложения


    Потому сегодня всякий, кто захочет создать более-менее традиционное приложение, вынужден переизобретать велосипед, который в общем-то не сложный, но времени отнимает много. Так что предлагаю не ждать, пока ребята из Digia напишут тулкиты для всех платформ, а взять эту работу на себя.
    Причем есть три основных направления:

    Компоненты: Судя по этой таблице qt-project.org/wiki/Qt-Quick-Controls-for-Tizen практически все компоненты написаны парой энтузиастов, так что ничего сверхъестественного тут нет. Хвататься за все платформы сразу, конечно, не стоит, начнем с Android. С другой стороны, если кому-то интересно писать именно под Windows Phone  — почему нет, многопоточность рулит!
    Картинки интерфейсов, цвета, иконки под Android тут.

    Поведение: Приложения «ни рыба ни мясо» отталкивают пользователей, потому нужно переработать HIG каждой платформы, написав простые правила, скажем по работе со списками: каким образом принято организовывать удаление, редактирование, навигацию между экранами.

    Документация: Можно выделить основные не освещенные темы, разделить их, написать соответствующие статьи.

    В завершение небольшой ролик с кастомным пикером, статью про который постараюсь написать к началу следующей недели.


    P.S. Qt 5.3, до выхода которой остается меньше недели, обещает принести официальную поддержку Windows Phone, новых диалогов, виджета календаря, так что думаю стоит сразу ориентироваться на эту версию.
    P.P.S. Хотел бы услышать ваши предложения касательно хостинга, площадки для обсуждения, лицензии, общей организации работ.
    iStodo 40,32
    Компания
    Поделиться публикацией
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 16
    • 0
      Представим на минуту, что существует простая технология, позволяющая писать мобильные приложения под все платформы сразу. Без проблем с производительностью, с легким доступом к железу на низком уровне. Бесплатно*. Приложения выглядят почти как родные.

      Вот! Именно в этом почти вся заковыка. Потому-то Qt-based приложения и не смогут конкурировать с нативными. Жаль конечно, но это реальность (о которую мне в своё время пришлось больно удариться)… При всём моём уважении к Digia…
      • +4
        Сейчас, когда основные платформы по сути отказались от дизайна, смешаться с ними стало гораздо проще, по крайней мере попробовать стоит.
        • 0
          Как показывает практика, дело не столько в самом дизайне элементов управления, сколько в их поведении. Нужно делать анимацию, скорость отклика, тип взаимодействия с элементом таким, каким его привыкли видеть на каждой конкретной платформе.
          • 0
            Нужно делать анимацию, скорость отклика, тип взаимодействия с элементом таким, каким его привыкли видеть на каждой конкретной платформе.

            И именно в этом состоит основная сложность. Едва ли Qt предоставит такую унифицированность для всех поддерживаемых ею платформ… Впрочем, я сужу по десктопной разработке.
          • 0
            Возможно, вы правы.
          • +4
            На desktop-е же получается и довольно успешно. Чем оно должно отличаться от мобильных? Все для этого есть, только вот некому заниматься всем этим. Людей не хватает.
            • 0
              На desktop-е же получается и довольно успешно.

              Я был бы рад согласиться с вами, но мой опыт показывает обратное. В частности, на Mac OS X Lion (и старше) у меня не получилось создать Qt-приложение, которое выглядело бы как родное Cocoa-приложение. Вернее, как бы получилось, но, во-первых, оно было наводнено Objective-C-вставками, а во-вторых, некоторые элементы всё равно остались чуток «неродными».

              Я уже не говорю о том, что Qt-приложение запускалось и работало ощутимо медленнее родного…
              • 0
                А можно чуть подробнее, какие элементы, какая версия библиотеки, для чего использовалась куча вставок?
                • 0
                  Можно, но это будет оффтопом, поскольку мы выйдем за рамки данной статьи. Поэтому просто поверьте мне на слово. Когда-то я не согласился с двумя пользователями на Stackoverflow, объяснившими проигрышность Qt-приложений на Mac OS X. И это несогласие стоило мне 8 месяцев работы, в итоге выброшенных в корзину…

                  Впрочем, если не верите на слово — можно в личной переписке. Объясню всё подробно.
                  • +2
                    Как угодно, но кроме веры на слово у меня тоже есть опыт такой разработки, который мне кажется вполне успешным.
                    • +3
                      Выглядит вполне убедительно!
                      Я тоже не соглашусь с предыдущим оратором насчет медлительности Qt'a. Быстрый он, как ни крути.
                      • 0
                        Быстрый он, как ни крути.

                        Возможно, это справедливо для самых последних версий Qt. А вот на примере Qt 5.0.1 я убедился: родное Cocoa-приложение запускалось примерно в 4 раза быстрее. К тому же работа некоторых виджетов (в частности, QTextEdit) происходила с визуальной задержкой (да, с небольшой, но всё же), а вот на родном Cocoa-приложении работа аналогичного виджета была просто мгновенна.

                        Поймите, я не ругаю Qt. Digia делает прекрасную работу. Однако если говорить именно о Mac (Linux и Windows — это отдельный разговор), то родное Cocoa-приложение всегда будет в выигрыше. Опять-таки, для будущих версий Qt это утверждение может быть и потеряет свою актуальность, но на данный момент это так.
          • 0
            Было бы интересным сравнить с другими кросс платформенными тулкитами, скажем, с python kivy.
            И еще вопрос: стоит ли распыляться на все платформы сразу, когда рынок фактически поделен между android, ios и догоняющей win? Все-таки правило 80/20 работает…
            • +1
              На Python я не пишу, но вот этот ответ выглядит достаточно полным. Фреймворков много, из известных кроссплатформенных еще можно вспомнить Mono Touch, однако набор платформ, стоимость лицензии, нативность интерфейса, скорость работы у всех разная, нужно поработать со всеми, чтоб можно было сравнивать. Qt наш основной инструмент, потому и остановились на Qt Quick.
              Хвататься за все платформы сразу, конечно, не стоит, начнем с Android. С другой стороны, если кому-то интересно писать именно под Windows Phone — почему нет, многопоточность рулит!
              • 0
                Спасибо за ответ и за ссылку.
                Киви вроде бы шагнула вперед с того времени, да и любой кросс платформ тянет за собой свои либы, если я не ошибаюсь…
            • 0
              С документацией не все так плохо, да и перенос с QtQuick 1.0 в основном заключается в смене версии в каждом файле (хотя бывают и более интересные вещи, например баги с хранением массивов в variant). А компонентов и правда нет =\
              В свое время, когда только узнал про QML, я думал, что люди будут создавать компоненты, делиться ими, библиотечки свои создавать. Но таких практически нету. И это грустновато.

              Можно не городить велосипедов, а постараться улучшить QtQuick Controls — пока они не особо юзабельны.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое