Qt 5.3: низкий старт в мобильной кроссплатформе

1.1. Несовместимость разных версий библиотек.Qt достаточно часто обновляется, что, с одной стороны, хорошо, но, с другой стороны, порой делает разработку ночным кошмаром. Происходит это потому, что новые версии не имеют совместимости со своими предшественниками, часть функционала которых в лучшем случае устаревает, в худшем — становится более недоступной. Следствие — обилие неактуальных материалов/примеров в Сети, которые невозможно использовать в версии 5.3. Вообще, к огромному сожалению, годной информации по Qt 5.3 ничтожно мало: описывая проблему в поисковике, мы попадаем в документацию (документация качественная, но одной общей теории в большинстве случаев не хватает) или примеры для версий 4.6 или 4.8, которые, как правило, бесполезны для Qt 5.3. Официальные гайды и примеры, опять-таки, в основном описывают очень тривиальные случаи, с которыми, как правило, в действительности практически не сталкиваешься. О литературе упоминать не буду, с ней дела обстоят примерно также (актуальна для старых версий). Впрочем, эти минусы отчасти компенсирует активное сообщество (официальный форум — qt-project.org/forums).

1.2. Немного «сырая» поддержка функционала Android/iOS.

Если говорить в лоб, то на текущий момент нет реализации WebView для данных платформ. Возможно, не самый страшный недостаток, но о простой работе с геокартами, например, пока стоит забыть. Вторая проблема — невозможность получить IMEI устройства (скажем, для реализации идентификации на сервере): в старых версиях для этой цели служила библиотека QtMobility, в новых версиях её нет, полноценная замена для прежней ещё не реализована. Впрочем, даже эти недостатки реально решить, однако для этого требуется «погружение» на нативный уровень для каждой платформы (например, получение IMEI на Android — habrahabr.ru/sandbox/77966/), но это, имхо, противоречит изначальной идее платформонезависимой разработки. Также отмечу присутствие некоторых незначительных багов в самой среде разработки (Qt Creator) — иногда, например, не применялись изменения в QML-файлах без перезапуска IDE.

1.3. Отслеживание ошибок.

Общаясь с другими разработчиками (Android, iOS, Web) у меня создалось впечатление, что некоторые программисты не горят желанием использовать библиотеки, где как основной язык используется C++. В действительности при разработке небольших приложений основная часть неприятных ситуаций возникала из-за специфики всё же самого Qt, нежели C++. Как правило, сообщения об ошибках не очень содержательны: выдаваемые «file not found», «undefined reference» и несколько других сообщений могут указывать на строчки кода в классе, когда проблема может заключаться, например, в отсутствии подключения модуля в *.pro-файле, неправильном вызове метода совсем в другом месте программы и так далее. Для отслеживания ошибок (чтобы не искать последние почти вслепую) очень выручают логи: функция qDebug () — в C++ коде и console.log () — в QML. Теме ошибок посвящена практически вся следующая часть публикации, к которой мы уже подошли.

© Habrahabr.ru