В один прекрасный момент у меня появилась необходимость писать код под Qt. Как выяснилось, то что я знал в прошлом о Qt стало уже неактуальным, а в некоторых вещах я и вовсе ошибался. Я считал, что для того, чтобы писать программы для коммерческого использования (с закрытым исходным кодом) нужно приобрести коммерческую версию лицензии за немаленькую сумму денег. Это меня раньше и останавливало, но начиная с версии Qt 4.5 добавилась возможность использования библиотек Qt под лицензией LGPL (информация взята из ресурса Wikipedia, где написано следующее: «On 14 January 2009, Qt version 4.5 added another option, the LGPL, which should make Qt even more attractive for non-GPL open source projects and for closed applications.«). Это значит, что появилась возможность использовать Qt в коммерческих проектах бесплатно, если соблюдать следующие правила:

  • написанный нами проект ДОЛЖЕН подключать к себе Qt библиотеки только способом динамической линковки;
  • если вдруг (что вряд ли) мы захотим как-то изменить исходный код библиотеки Qt и дальше использовать его в своих проектах, то нам придется для этого открыть измененный исходный код для рядового пользователя под лицензией LGPL.

В этих вещах и кроются основные ограничения. В большинстве случаев они являются не критическими. Даже не знаю, стоит ли очередной раз описывать преимущества использования Qt… Думаю лишним не будет вкратце рассказать о том, какими выгодами обладает Qt. Это в первую очередь кроссплатформенность. Кроме этого исполняемый файл запускается не на виртуальной машине (как например, Java или .Net приложение) а «нативно» (т. е. можно добиться большего быстродействия). Разрабатывать программы придется на модифицированном С++. Почему модифицированном? Потому что в Qt добавлены некоторые дополнительные возможности. Я о сигналах и слотах. Но благодаря такому расширению функционала языка, разработчик получает взамен больше возможностей и разного рода удобностей. Что до того, как работает Qt… Когда разработчик запускает сборку проекта с исходных кодов, в первую очередь запускается так называемый MOC предкомпилятор (в нем и кроется главная особенность Qt), который анализирует написанный код и преобразует его таким образом, чтобы потом его можно было бы собрать указанным С++ компилятором, будь то g++ от GCC или cl от VisualStudio. Данный MOC предкомпилятор также учитывает особенности архитектуры и целевой операционной системы (если такова имеется). Вообще, литературы в которой освещены достоинства Qt очень много… Предлагаю сразу же перейти к рубрике «С чего начать разработку под Qt?». Мы рассмотрим как организовать связку Qt-VisualStudio. Нам понадобятся такие установочные пакеты:

Первый — это собственно инсталлятор, который содержит большое количество Qt библиотек и Qt Designer (служит для удобного создания графического интерфейса). Второй, в свою очередь, — это установщик, который являет собой плагин для VisualStudio (вроде не работает для Express выпусков VisualStudio). После установки данного плагина в «студии» появится вкладка для работы с Qt проектами. Благодаря данному плагину появляется возможность создавать Qt проекты прямо из VisualStudio.

После загрузки устанавливаем сначала первый, потом второй установочные файлы.

Для того чтобы не было особых проблем на разных платформах нужно правильно установить следующие переменные среды:

  • QMAKESPEC
  • QTDIR
  • PATH
  • LANG

В Microsoft Windows:

«My Computer->Properties->Advanced->Enviroment Variables»

нужно добавить и/или модифицировать следующие переменные следующим образом:

  • QTDIR = С:\QT\5.0.1
  • PATH = %QTDIR%\bin (нужно дописать до существующего пути эту запись)
  • QMAKESPEC=%QTDIR%\mkspecs\win32-msvc2010
  • LANG = en_US

После этого необходимо перезагрузить систему. Все! Теперь можно приступать к созданию Qt проекта. Как это делается — интуитивно понятно (имхо). И еще, для изменений графического интерфейса нужно открыть файл проекта с расширением .ui c помощью Qt Designer (который запускается по умолчанию).

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

«Макс Шлее — Qt 4.5. Профессиональное программирование на C++».

P.S. Один странный момент при работе с графическими компонентами от Qt… В Qt Designer я создал простой GUI, с которого позже был получен С++ код. Я заметил, что контролы создаются через оператор new, но не увидел ни одного оператора удаления динамически выделенной памяти delete. Это меня насторожило. Я начал искать ответы и наткнулся на следующую страницу. Выходит, что лейаут в который мы добавляем дочерние компоненты, сам позаботится об их удалении. К чему это я? Да к тому, что не стоит очень сильно переживать, если кто-то будет задавать себе подобный вопрос. Также стоит помнить, что данная автоматизация может привести к потере нашей с вами бдительности при удалении объектов. Так что будьте на чику!:)

Удачи!!!