В 1991 году Хаарвард начал писать классы, которые фактически образовали Qt, причем проектные решения принимались совместно с Айриком. В следующем году Айрику пришла идея «сигналов и слотов» простой, но мощной парадигмы программирования графического пользовательского интерфейса, которая в настоящее время заимствована некоторыми другими инструментальными средствами. Хаарвард воспринял эту идею и вручную реализовал ее. К 1993 году Хаарвард и Айрик разработали первое графического ядро Qt и могли создавать свои собственные виджеты. В конце этого года Хаарвард предложил совместно заняться бизнесом и построить «самые лучшие в мире инструментальные средства разработки на С++ графического пользовательского интерфейса».
Начало 1994 года не предвещало ничего хорошего, когда два молодых программиста собирались выйти на установившийся рынок, не имея ни заказчиков, ни законченного программного продукта, ни денег. К счастью, жены обоих имели работу и могли поддержать своих мужей в течение двух лет, которых, как считали Айрик и Хаарвард, будет достаточно для разработки программного продукта, позволяющего начать зарабатывать деньги.
Буква «Q» была выбрана в качестве префикса классов, поскольку эта буква имела красивое начертание в шрифте редактора Emacs, которым пользовался Хаарвард. Была добавлена буква «t», означающая «toolkit» (инструментарий),
2D и мощные классы для просмотра и редактирования текста в кодировке Unicode, не говоря уже о тысячах небольших улучшений по всему спектру классов Qt. Qt 4 является первой версией Qt, доступной на всех поддерживаемых платформах как для коммерческой разработки, так и для разработки с открытым исходным кодом.
Кроме того, в 2005 году компания «Trolltech» открыла свое представительство в Пекине для предоставления пользователям в Китае и во всем этом регионе услуг по продаже, обучению и технической поддержке компонента Qtopia.
Со дня образования компании «Trolltech» популярность Qt постоянно росла, и она продолжает расти в наши дни. Этот успех является отражением как качества Qt, так и того удовольствия, которое разработчик получает при ее использовании. За последнюю декаду Qt превратилась из «секретного» программного продукта, известного только избранной группе профессионалов, в продукт, которым пользуются по всему миру тысячи коммерческих заказчиков и десятки тысяч разработчиков приложений с открытым исходным кодом.
Часть I. Основные возможности средств разработки Qt
Глава 1. Первое знакомство
Если вы уже знакомы c Java или C#, но имеете лишь ограниченный опыт работы с С++, возможно, вы захотите начать с , в котором дается введение в С++.
«Здравствуй, Qt»
01 #include <QApplication>
02 #include <QLabel>
03 int main(int argc, char *argv[])
04 {
05 QApplication app(argc, argv);
06 QLabel *label = new QLabel("Hello Qt!");
07 label->show();
08 return app.exec();
09 }
В строках 1 и 2 в программу включаются определения классов QApplication и QLabel . Для каждого Qtкласса имеется заголовочный файл с тем же именем (с учетом регистра), содержащий определение этого класса.
В строке 5 создается объект QApplication для управления всеми ресурсами приложения. Для конструктора QApplication необходимо указывать параметры argc и argv , поскольку Qt сама обрабатывает некоторые из аргументов командной строки.
В строке 7 создается «виджет» текстовая метка QLabel , который выводит на экран сообщение «Hello Qt!» (здравствуй, Qt). По терминологии Qt и Unix виджетом (widget) называется любой визуальный элемент графического интерфейса пользователя. Этот термин происходит от «window gadget» и соответствует элементу управления («control») и контейнеру («container») по терминологии Windows. Кнопки, меню, полосы прокрутки и фреймы являются примерами виджетов. Одни виджеты могут содержать в себе другие виджеты. Например, окно приложения обычно является виджетом, содержащим QMenuBar (панель меню), несколько QToolBar (панель инструментов), QStatusBar (строка состояния) и некоторые другие виджеты. Большинство приложений используют QMainWindow или QDialog в качестве окна приложения, однако Qt настолько гибка, что любой виджет может быть окном. В данном примере QLabel является окном приложения.
Строка 7 делает текстовую метку видимой. Виджеты всегда создаются сначала невидимыми, и поэтому до непосредственного вывода на экран вы можете настроить их и тем самым не допустить мерцания экрана.
Строка 8 обеспечивает передачу управления приложением Qt. В этом месте программа переходит в цикл обработки событий, т.е. в своего рода режим «простоя», ожидая со стороны пользователя таких действий, как щелчок мышки или нажатие клавиши на клавиатуре.
Для простоты мы не делаем вызов оператора delete для объекта QLabel в конце функции main() . Подобная утечка памяти в такой небольшой программе безвредна, поскольку после завершения программы эта память будет возвращена операционной системой.
Рис. 1.1. Вывод приветствия программы Hello в системе Linux
Теперь вы можете проверить работу этой программы на своей машине. Сначала необходимо установить Qt 4.1.1 (или более позднюю версию Qt 4); процесс установки рассмотрен в . С этого момента мы будем предполагать, что вы корректно установили библиотеку Qt 4 и ее каталог bin занесен в переменную окружения PATH. (В системе Windows это делается автоматически программой установки Qt.) Вам также потребуется поместить файл hello.cpp с исходным кодом программы Hello в каталог hello. Вы можете набрать файл hello.cpp вручную или взять его с компакт-диска, который входит в состав книги; на компакт-диске этот исходный код находится в файле /examples/chap01/hello/hello.cpp.