Pull to refresh

Автоматизация инструментов Qt

Reading time3 min
Views5.2K

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



Все началось с того, что нужно было деплоить много разных проектов и каждый раз писать в консоли много букв не хотелось (вот оно молодое поколение!). Так как у меня был опыт работы с qt и qml, я решил запилить свое приложение.


Основные требования были очевидны сразу — программа должна делать деплои и установщики под Windows. У Qt есть windeployqt и Qt Installer Framework для данных задач. Также сразу захотелось добавить автоматическую генерацию файла qmldir и файлов перевода.


Изначально я не стал рисовать дизайн, а просто думал на ходу и делал, это оказалось ошибкой, так как сложно учесть и удержать в голове все детали и возможности программы. Из-за этого первая программа оказалась плохо проработанной и практически не настраиваемой. Но она работала! Для запуска утилит я создаю bat файл, устанавливаю там рабочее окружение:


set PATH=G:\Qt\5.13.2\mingw73_64/bin;G:\Qt\Tools\mingw730_64/bin;%PATH%\n

А дальше прописываю ту утилиту которую мне нужно, с добавленными к ней настроенными пользователем аргументами. С помощью QProcess запускаю данный файл на выполнение. Так делается с развертыванием, установщиком и lupdate ( генерация файлов перевода), в случае с qmldir никакие процессы в принципе не нужны, так как идет простое копирование названий файлов.


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



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



 
После завершения работы над дизайном, начал постепенно переделывать каждую утилиту. В windeployqt изменений почти не было, добавилась только настройка еще одного аргумента. В qmldir добавились функции по выбору модификаторов для каждого файла и выбор версии, генерация файла .*qmltypes с автоматической записью в qmldir. Самые больше изменения коснулись installer, там просто куча параметров, с выбором и настройкой каждого package и файла config.xml с удаленными репозиториями. Программа сама создает структуру папок, файлов настройки (config.xml и package.xml) и заполняет их, также происходит копирование самих пакетов в папку data. Можно создать 3 типа установщиков: только офлайн, только онлайн и совмещённый, есть еще и 4 тип, когда из установщика исключаются определённые пакеты, но я решил что данный функционал не столь важен в первое время и его я добавлю в следующих версиях. Для удаленных установщиков необходимо создавать репозитории с помощью repogen.exe, программа также умеет это делать.


Для работы программы необходимо указать папку Qt на компьютере, путь до компилятора в номере версии Qt и путь до компилятора в папке Tools. Я понимаю что это не самое удобное решение и поэтому в будущих версиях сделаю парсинг папки Qt, с выбором компилятора через ComboBox.


Однако работа еще не закончена до конца, каждый раз вбивать одни и те же значения неудобно, да и неправильно, нужно и это как то автоматизировать, например создать раздел Scripts, где хранить данные для запуска утилит. Также хочется добавить macdeployqt и linuxdeployqt.


Ссылка на репозиторий github


P.S. Это моя первая программа, выложенная в открытый доступ широкой публике, буду рад всем замечаниям. Как всегда здоровая критика приветствуется. Также буду очень рад предложениям по увеличению функционала программы.

Tags:
Hubs:
+7
Comments13

Articles

Change theme settings