Цель статьи
- Рассказать о своем опыте разработки ПО с использованием wxWidgets.
- Поделиться готовым решением в области подготовки и печати шаблонов документов.
- Получить рекомендации и конструктивную критику по функционалу.
Но сначала история
Итак, однажды, работая на одном из промышленных предприятий, которое имело собственное оборудование для коммерческого учета нефти, со своими программными решениями под разными ОС, все чаще и чаще стал задумываться над кроссплатформенной разработкой ПО.
Хлебнул я тогда разных библиотек. Были в этом списке и Gtk+, и QT. Но по настоящему, меня привлекла wxWidgets.
Был у меня в то же время частный проект БД для фирмы, которая занималась сопровождением сделок по купле-продаже автомобилей, страхованием, ТО. Его я делал по выходным. На начальном этапе, этого проекта я и опробовал QT, Gtk+, wxWidgets, но в итоге полностью заново реализовал при помощи других инструментов, потому как:
Терпение — прекрасное качество, но жизнь слишком коротка, чтобы долго терпеть — Абу-ль-Фарадж.
На тот момент причиной отказа от использования этих библиотек было ограничение по времени, а не сложность технической реализации. Бизнес ждать не любит.
В общем, при разработке этого проекта для каждой опробованной библиотеки я достиг определенного уровня завершенности. В таблице указаны результаты в порядке возрастания.
Инструмент | Что было сделано | Отзыв от заказчика | Причина отказа |
---|---|---|---|
QT | Пара форм + обвязка их логикой. | Заказчику не представлен. | Много времени тратил на поиск решения. |
Gtk+ | Весь GUI. | Для WinXP GUI выглядел не как родной и привычный. | Не хватало построителя GUI, интегрированного в IDE. Не привычный вид GUI. Громоздкость реализации, длинные имена функций. Много времени тратил на поиск решения. |
wxWidgets | Весь GUI + БД. | Не было печати документов с точным позиционированием элементов. | Не было готового генератора шаблонов документов для печати. |
Были и другие, но их результаты еще скромнее, чем у QT.
Справедливости ради надо сказать, что это было первый опыт использования всех этих библиотек. Если бы не генератор шаблонов документов для печати в wxWidgets…
Что теперь?
В итоге совсем недавно я сделал минимально-жизнеспособный кроссплатформенный генератор шаблонов и клиентскую библиотеку для печати с использованием wxWidgets на том уровне, которого мне бы хватило тогда.
Желающие попробовать могут взять тут: c-help.tk. Сайт мне любезно предоставил брат, я его попросил оформить максимально упрощенно и без изысков. Надеюсь, у нас получилось.
Что имеем на данный момент:
- Генератор шаблонов под Windows, Linux.
- Клиентская библиотека под Windows, Linux с примером.
- Пример клиента, использующий эту библиотеку под Windows,Linux.
- Сайт для продвижения.
Как это выглядит?
Генератор шаблонов:
Простейший клиент (консольное приложение слева):
Как это работает?
Генератор шаблонов:
1. Создается некий шаблон, в котором графические элементы точно расположены, как на техническом чертеже.
2. Создается перечисление имен переменных
3. В нужные места шаблонов размещаются текстовые поля.
4. В текстовые поля можно вводить статичный текст вместе с именами переменных. Переменная указывается между специальными символами «${» и «}$» (пока только вручную).
5. Сохраняется шаблон в файл. В файле может быть множество шаблонов. Файлы картинок к шаблону не прикрепляются. Клиент на печать выдает только картинки в формате BMP.
Клиент + клиентская библиотека:
6. Загружает файл шаблона.
7. Выбирает шаблон (пока только через индекс).
8. Задает данные в переменные (пока только через индекс).
9. Выдает на печать. При печати могут произойти смещение из-за разных настроек полей принтера.
Заключение
Что использовалось:
- Среда разработки Code::Blocks 13.12.
- wxWidgets 3.0.2.
- MinGW 3.4.5 компилятор под Windows для проекта и компиляции wxWidgets (gcc под Linux).
- Windows 8.
- Linux Mint 17.2.
- Doxygen для формирования описания клиентской библиотеки.
- Git.
- TUT для юнит тестов.
- GDB 7.6.1 для отладки.
Что порадовало в wxWidgets:
- Плагин wxSmith в Code::Blocks помогает выполнить построение GUI в режиме графического редактора, что позволило очень сильно сократить время генерации кода.
- Пока не пришлось переписывать ни строчки кода для компиляции под Linux. Надеюсь, так будет и дальше.
- Полностью доступная подробная документация.
- Лицензия wxWidgets позволяет на основе своей библиотеки создавать приложения под все поддерживаемые платформы под различными лицензиями.
- Интернационализация приложения (GNU gettext).
- PropertyGrid из коробки.
Что не очень порадовало в wxWidgets:
- GDB при отладке не отображал, например, значение строковых классов wxString. При этом не помогли изменение конфигурации отладчика, как советуют на форумах. Грустно. Хотя в предыдущих версиях Code::Blocks у меня, кажется, эти данные отображались без исправлений. Пришлось сделать вывод строковых переменных в файл лога и смотреть в нем значения, которые записывались. Как бонус получил функционал ведения журнала действий пользователя (в релизе отключено), что тоже полезно.
- Инициализация библиотек wxWidgets происходит неявно и автоматически в макросе при использовании GUI приложения, созданном в Code::Blocks. Описание способа инициализации вручную хоть и представлены в документации и представляет собой простой вызов функции wxInitialize(), но описан крайне скудно.
Думаю, что без автоматизации многих моментов в Code::Blocks, использовать wxWidgets было бы сложнее.
Вот и все пока.
Автор: ronme