среда, 28 января 2009 г.

Разработка кроссплатформенных приложений с использованием библиотеки Qt

Практика моя не стоит на месте, поэтому осваивая все новые и новые высоты мастрества программирования, я решил, что для многих читателей будет полезен цикл сообщений по использованию библиотеки Qt. Тот кто уже пользуется возможно найдет нечто новое для себя, тот кто еще не пользуется надеюсь после прочтения захочет хотя бы посетить сайт компании (http://www.qtsoftware.com/)
Подробно описывать библиотеку не имеет никакого смысла, по этому поводу написано впечатляющее количество книг, и самое главное есть полная документация к коду, не говоря уже о том, что библиотека распространяется бесплатно в исходных кодах по лицензии GNU GPL.
Итак, отрывая этот цикл статей, кратко опишу все достоинства и недостатки библиотеки.
Достоинства: практически полная платформонезависимость кода. Для не поддерживаемых данной библиотекой платформ сейчас софта пишется очень мало (о многих поддерживаемых компиляторах и платформах я вообще узнал из списка поддерживаемых компиляторов и платформ на все том же сайте Qt Software).
Сама организация архитектуры классов сделана крайне грамотно, с использованием новейших техник программирования. Мощная мета-объектная система (по функционалу практически ничем не уступает C#, а если учесть что все это воистину кроссплатформенно, то и качественно превосходит C#). Как в C# есть сборщик мусора .
Замечательный модуль QtGui позволяющий тонко и гибко работать с любыми элементами управления начиная от пресловутых кнопочек и кончая таблицами баз данных workspace'ами и прочими. К слову в графическом интерфейсе всезде используется крайне удачная модель MVC (модель-вид-контроллер) значительно упрощающая коммуникацию приложения с пользователем.
Огромный функционал для написания графических движков, в том числе с использованием OpenGL графики (все аффинные преобразования любых фигур, в том числе картинок, проверка столкновений, ну практически готовый игровой 2D движок!).
Сушествует даже Qt вариант STL, QList, QVector, QHash, QMap и прочие, поддержка итераторов в стиле STL и Java (кому что больше нравится).
Поддержка многих драйверов баз данных, архиваторов (zip, tar...), форматов картинок (jpg, png, gif, svg, ... и многие многие другие).
В общем этот список можно продолжать еще очень долго. Сразу видно, что Qt по функционалу разом бьет и C# и gdi+.
Недостатки: да, достоинств конечно много, но есть и не достатки (куда уж без них!). Существуют проблемы с развертыванием приложения, особенно с плагинами (базы данных, некоторые форматы картинок и архиваторов), не приятно что под Windows приходится вместе с приложением таскать Qt'шные библиотеки, а если еще вы и обновить вздумаете библиотеку, то приложение вообще может не запуститься.
Время от времени обнаруживаются проблемы со строками.
Библиотека классов с геометрическими фигурами написана конечно здорово - много всего полезного, но вот получить все точки фигуры из абстрактного класса стоящего на вершине иерархии - не просто, а это уже промах в архитектуре, не такой большой конечно, но в некоторых случаях приходится писать заново под себя, а это, согласитесь, неприятно.
Есть некоторые неожиданности и в графическом интерфейсе.

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

На этом я пожалуй на сегодня закончу. Заглядывая в будущее могу сказать, что в ближайшем времени появятся статьи в которых я поделюсь готовыми рецептами, ибо на мой (хоть и субъективный) взгляд любому программисту это полезно. И все таки последний совет: если совсем уже ничего не получается - прочтите документацию, она всегда поможет!

Комментариев нет: