Различия Qt Creator и Visual Studio 2015

Рассказывает Тимофей Седов, разработчик интеллектуальной ассистентки Никки


В этой записи хотелось бы поделиться своими впечатлениями от IDE Visual Studio. С тех пор, как мы начали разрабатывать универсальную версию нашей интеллектуальной ассистентки Никки и отошли в сторону от Qt Creator, впечатления, надо сказать, остались только положительные.

Работали мы в версии 2015-го года и первое, что бросается в глаза – ребята из Microsoft проделали действительно огромную работу в сравнении с их версией 2013-го. Если внешне среда практически не изменилась, то внутренностей стало куда больше. Тут тебе и мощные средства диагностики приложения, встроенный конструктор макетов, множество, я повторюсь – множество различных средств для разработки кроссплатформенных приложений, что касается не только Windows и Windows Phone, но также и других платформ: Android, iOS.

Итак, раз уж мы создавали приложение типа «Universal App Windows», то и рассказывать я буду именно с точки зрения создания этого типа программ. К тому же это мой первый опыт в разработке Metro-приложений.

Начинаем

Как только вы создаете свой проект, то тут же попадаете в конструктор макетов, где нас встречает планшет, куда, собственно, и будут помещаться все ваши UI-элементы. Кроме того, если вам вдруг не удобно добавлять элементы из списка и проставлять свойства в специальном меню, как это было для меня, то можно открыть обычную XAML-разметку. Чем это удобнее? Хотя бы тем, что здесь вам проще будет определиться с иерархией элементов. Если честно, то визуальным представлением макета я пользовался довольно редко, т.к. после понимания того, как строиться XAML-файл, становиться довольно просто определить куда и как прописать нужный элемент именно через него. Единственная проблема, с которой мне пришлось столкнуться – конструктор довольно-таки часто падал с ошибками (решалось только перезагрузкой). Но думаю, к финальной версии студии это поправят.

Если вдруг, стандартные UI-элементы вас не устраивают, то можно их перерисовывать. Пока что это единственная вещь, которая мне не понравилась при разработке. По сравнению с тем, как это устроено в Qt (а именно через QSS), здесь все более сложно и громоздко. Если в Qt я пришел со знанием того, что такое CSS и все шло гладко, то для реализации задуманного в XAML мне пришлось полистать документацию (ни в коем случае не говорю, что это плохо, но время, как не посмотри, отнимает).

Собственно о программировании

Теперь о самом программировании. Писали на C++/CX, где вы можете комбинировать C++ и широкий выбор библиотек Windows Runtime. Тут Microsoft активно продвигает стандарт C++11 и более новые. Допустим, все асинхронные функции построены на основе лямбда-выражений, активно используется квалификатор auto, часто встречается необходимость в умных указателях (таких как shared_ptr). И это круто. Волей-неволей, но придется вникать в современные стандарты языка, который почему-то даже в новой Qt Creator по умолчанию отключен.

В принципе, как в Qt, так и в Windows Runtime все построено на классах. Но как только начинаешь писать код и использовать какие-то библиотеки, то понимаешь, что есть одно огромное отличие – большая часть работы построена на создании/вызове асинхронных функций. Если вы прежде не сталкивались с этим, то поверьте — вам придется почитать документацию (в этом случае это даже хорошо, вникните в асинхронное программирование). Вот материал по теме PPL (библиотеки параллельных шаблонов):

Думаю, что через пару дней прочтения и разбора пары примеров, у вас сложиться представление о том, как писать приложения на C++/CX. В сравнении с Qt: использование уже готовых асинхронных функций, а также довольно-таки простое создание своих собственных намного проще, чем параллельные вычисления с помощью потоков в Qt.

Но вот ваш проект готов: логика написана, UI-элементы созданы. Теперь можно тестировать. И если с тестированием самой логики еще все понятно, то как быть с интерфейсом? Все просто. Внутри среды встроен эмулятор, позволяющий увидеть, как ваше приложение будет вести себя на экранах с другим разрешением, с другой ориентацией, с сенсорным экраном. Тут даже скриншот можно сделать :)

В общем, очень приятная вещь, экономит массу времени.

Также (мелочь, но хотелось бы отметить) через WinRT довольно просто сохранять и получать настройки приложения – удобно по сравнению с тем же Qt. К тому же, все настройки будут доступны с любого вашего устройства, что несомненно радует.

Полезная ссылка: Управление жизненным циклом и состоянием в приложении Магазина на C++

Вывод

Qt — довольно большой фреймворк, но при работе с ним не чувствуешь той легкости, которую тебе предоставляет Visual Studio с C++/CX. Удобная среда, простота параллельных вычислений, по стандарту включенные новые стандарты C++ (включая некоторые возможности еще не вышедшего C++17).

Лично мое мнение: Qt сильно отстает от Visual Studio; а учитывая то, как Microsoft последнее время активно занимаются своей средой, то отставать будет всегда. Уже сейчас нет смысла писать на C++/Qt, ведь Visual Studio предоставляет весьма широкие возможности для разработки кроссплатформенных приложений.