• Разработка для SailfishOS: основы

    • Tutorial
    Здравствуйте! На прошлой неделе я написал о том как начать разрабатывать под мобильную платформу Sailfish OS. Сегодня же я хотел бы рассказать о жизненном цикле приложений Sailfish, о создании страниц приложения и управления ими, а также о некоторых специфических особенностях мобильных приложений, которые следует учитывать при разработке под Sailfish OS, в частности управление ориентацией устройства.
    Читать дальше →
  • GPS трекер на Qt, карта и трек

      Решил попрактиковаться в программирование под Android на Qt. В качестве темы выбрал GPS трекер.
      Набор функций этого трекера:


      • снимать измерения с GPS приемника;
      • экспортировать трек в GPX (GPS eXchange Format);
      • выводить трек на карту;
      • выводить время в пути, длину пути, среднюю скорость.

      Под катом будет приведен пример работы с картой в QtQuick.


      Читать дальше →
    • Использование механизма SRR в приложениях разработанных на Qt для QNX

      • Tutorial

      Фреймворк Qt один из самых популярных и применяемых при разработке кроссплатформенных настольных и мобильных приложений. Эта популярность не могла рано или поздно не привести к использованию Qt в системах специального и ответственного назначения. Достаточно давно существует возможность разработки на Qt для QNX Neutrino. Библиотека Qt поддерживает платформу QNX, а среда разработки Qt Creator обеспечивает взаимодействие с системами на QNX. Однако QNX, как система в том числе и для встраиваемых решений, имеет в своём составе технологии, которые не требуются, а потому и отсутствуют в системах общего назначения. Ключевая для ОСРВ QNX функциональность, на которой построена сама система и на которую нередко опираются пользовательские задачи это передача сообщений. Об особенностях применения механизма SRR (Send/Receive/Reply), как ещё называют передачу сообщений в QNX, и о разработке двух примеров Qt-приложений — клиента и сервера — я и хотел бы рассказать сегодня.

      Читать дальше →
    • Разработка Android приложений с использованием qt и android studio часть вторая

      • Tutorial
      Доброго времени суток всем посетителям и пользователям Хабра!

      Недавно я на эмоциях опубликовал статью, где я рассказывал о всех своих злоключениях при попытки создать qt приложение ( а именно вызвать и использовать
      QApplication a(argc, argv);
      
      и использовать его при помощи андроид студии. Было найдено «решение», которое было чрезвычайно костыльным. Теперь у меня были выходные, чтобы разобраться как надо работать с qt без таких костылей из андроид студии. Всем кому интересно — добро пожаловать под кат!
      Читать дальше →
    • Начало разработки для Sailfish OS

      • Tutorial
      Sailfish OS — это мобильная платформа, основанная на ядре Linux. Прочитать о ней можно на официальном сайте или в одном из обзоров платформы в сети. Например, один из них был опубликован на GeekTimes. В данной статье я хотел бы затронуть сам процесс разработки приложений для Sailfish OS, рассказать о том как начать программировать под данную платформу, а также поделиться некоторыми особенностями разработки.

      Читать дальше →
    • Опыт разработки управляющего ПО для квеструма

        Последние год-полтора пользуются большой популярностью т.н. квеструмы, квесты «выйди из комнаты» реализованные в реальной жизни. Когда я ходил на первые квесты, большая часть задачек сводилась к поиску ключей и кодов для механических замков, магнитные замки были чем-то крутым и редким, не говоря уже о беспроводных интерфейсах, но чем дальше, тем более технически сложным становится это развлечение. В конце зимы мой друг, работающий в одной из таких контор, попросил помощи в написании управляющей программы для одного из их квестов, поскольку у них слился программист и начали гореть сроки. Задача была интересной, деньги неплохими, да и хорошего человека выручить не грех, поэтому я согласился, хоть и обидно было понимать, что на этот квест я не пойду, так как буду знать весь его сценарий. Сроки изначально ставилися очень сжатые, поэтому для разработки я выбрал привычную среду С++\Qt5.5.
        Быстро стало понятно, что я совершил большую глупость, взявшись за работу с не очень хорошо прописанным тз, но подозреваю, что эту ошибку так или иначе совершал каждый, поэтому смысла о ней писать никакого, это не подводный камень, это самые обычные грабли.

        С аппаратной точки зрения управляемая часть квеста выглядит следующим образом:
        • Основной компьютер, стоящий в операторской, на котором работает программа
        • Две звуковые карты в нём, к каждой из которых подключено по 5 колонок
        • Телевизор, подключенный вторым экраном
        • Два USB-свистка, являющиеся переходниками с USB на COM-интерфейс
        • Пачка диммеров и релейников, управляемых по MODBUS


        В первичной постановке задача выглядела довольно простой, читать данные по MODBUS, писать данные по MODBUS, в нужные моменты проигрывать звук в нужную колонку и видео на второй экран. Как показала практика, всё это действительно делается не очень сложно. Но вот понять, как это сделать не очень сложно — уже не столь банально.
        Читать дальше →
        • +11
        • 6,6k
        • 6
      • QtQuick/QML в качестве игрового UI

          Статья обновлена с учётом полезных комментариев. Большое спасибо всем комментаторам за важные уточнения и дополнения.

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

          Выходом является использование готовых универсальных UI библиотек. Текущее их поколение представлено такими «монстрами» как Scaleform и Coherent UI, хотя если вам так хочется писать UI на HTML, то можно и просто взять Awesomium.

          К сожалению, у этой троицы, при всех её преимуществах, есть один существенный недостаток — жуткие тормоза, особенно на мобильных устройствах (несколько лет назад, я лично наблюдал, как практически пустой экран на Scaleform потреблял 50% от времени кадра на iPhone4).

          На этом фоне, мне всегда было интересно, почему никто не использует в играх Qt — библиотеку, неплохо зарекомендовавшую себя в десктопных приложениях. На самом деле, это утверждение не совсем верно — в Wiki проекта Qt есть список игр, однако в нём почти нет современных профессиональных проектов.

          Впрочем, причина, по которой именно привычные старые Qt Widgets не используются в играх, лежит на поверхности: они не рассчитаны на использование совместно с OpenGL или DirectX рендером. Попытки их скрестить дают довольно плохую производительность даже на десктопе, а про мобилки и говорить нечего.

          Однако, уже довольно давно в Qt есть гораздо более подходящая для этой задачи библиотека: QtQuick. Её контролы по умолчанию рендерятся ускоренно, а возможность задавать описание UI в текстовом формате отлично подходит для быстрой настройки и изменения внешнего вида игры.

          Тем не менее, я до сих пор не слышал об использовании Qt в профессиональном геймдеве. Статей на тему тоже не нашлось, поэтому я решил разобраться сам — то ли все что-то знают, чего не знаю я (но не рассказывают!), то ли просто не видят хорошую возможность сэкономить на времени разработки.
          Читать дальше →
        • Выпуск фреймворка Qt 5.7

            Вчера, спустя всего 3 месяца с момента предыдущего значительного выпуска, вышла версия 5.7 кроссплатформенного фреймворка Qt.


            Qt позволяет разрабатывать приложения при помощи C++ и декларативного языка программирования QML, поддерживает все основные десктопные и мобильные платформы, а также некоторые встраиваемые и имеет открытый исходный код. Существует коммерческая версия Qt, содержащая дополнительные проприетарные модули.


            Новый выпуск принес смену лицензии, открытие кода проприетарных модулей, переход на C++11, стабилизация некоторых экспериментальных модулей, а также новые экспериментальные модули и удаление устаревших.



            Читать дальше →
          • Model-View в QML. Часть четвертая: C++-модели

              Поскольку основное предназначение QML — это создание интерфейсов, то в соответствии с шаблоном MVC, на нем реализуются представление и контроль. Для реализации же модели, совершенно логично напрашивается C++. Здесь у нас будет гораздо меньше ограничений и мы сможем реализовать модель любой сложности. Кроме того, если значительная часть программы написана на C++ и данные поступают именно оттуда, то лучше всего там же поместить и модель.


              От использования такой модели может отпугнуть кажущаяся сложность реализации. Я не стану спорить с тем, что C++ не самый простой язык. Он посложнее QML и требует больше осторожности, чтобы не выстрелить себе в ногу, это факт. Несмотря на это, на практике не все так уж и страшно.


              Во-первых, не будем забывать, что мы пишем не на чистом С++, а с использованием Qt. Такие вещи как parent-child в QObject, implicit sharing для контейнеров, сигналы и слоты, QVariant и многое другое очень сильно упрощают и автоматизируют работу с памятью, чем избавляют разработчика от массы головной боли и повышают надежность. Иногда даже создается впечатление, что пишешь на динамическом языке программирования. Это же сокращает пропасть между QML и C++, делая переход между ними более-менее плавным.


              Во-вторых, все модели QML в конечном итоге приводятся к этим самым C++-моделям, только мы получаем упрощенный вариант и не самое максимальное быстродействие. Если уже есть понимание, как работать с моделями на QML, то с C++-моделями будет справиться проще. Мы просто узнаем в процессе чуть больше низкоуровневой информации, заодно улучшится понимание, как все это работает.


              В общем, освоить C++-модели очень даже стоит. В особенности это касается QAbstractItemModel, с которой мы и начнем.


              Model-View в QML:


              Читать дальше →
              • +13
              • 16,1k
              • 4
            • Разработка Android приложений с использованием qt и android studio

              Неактуально, кроме постановки задачи. Правильное решение в следующей статье.
              Добрый день, уважаемые хабровчане! В этой статье я хочу рассказать о своём опыте использования qt и android studio. А именно о том, как мне надо было в qt нарисовать текст и передать в андроид студию. Несмотря на простоту задачи, решение её заняло у меня довольно много времени и может быть кому-нибудь когда-нибудь где-нибудь сэкономит массу времени. Статья в каком-то смысле претендует на изобретение велосипеда, но в интернете я не нашёл решения. Кому интересно — добро пожаловать под кат!
              Читать дальше →
            Самое читаемое