В безбрежном океане библиотек для разработки GUI особняком стоит библиотека, известная под названием 'Qt' для C++, разработанная компанией Trolltech AS. 'Qt' была представлена в 1996 году, с тех пор, с помощью этой библиотеки было создано большое количество разнообразных приложений с графическим пользовательским интерфейсом.
Qt является кроссплатформенной, есть реализации библиотеки для MS/Windows, Unix/X11 (Linux, Sun Solaris, HP-UX, Digital Unix, IBM AIX, SGI IRIX и пр.), Macintosh ( Mac OS X ) и Embedded платформ. Библиотека является объектно-ориентированной, базирующейся на компонентах и имеет богатое разнообразие различных визуальных элементов - виджетов (widgets), предоставляемых в распоряжение программиста. 'Qt' распространяется в двух ипостасях - коммерческая реализация (имеются 'Qt Professional' и 'Qt Enterprise Editions' версии) и некоммерческая реализация, доступная для свободного скачивания www.trolltech.com).
Прежде всего вам нужно скачать библиотеку, я полагаю, что вы уже скачали версию Qt/X11 для Linux, поскольку примеры были написаны исходя из этого.
Теперь вам потребуются права суперпользователя для установки библиотеки, так что залогируйтесь пользователем 'root'.
Теперь разархивируем библиотеку в каталог /usr/local
[root@Linux local]# tar -zxvf qt-x11-free-3.0.1 [root@Linux local]# cd qt-x11-free-3.0.1
Теперь нужно скомпилировать библиотеку с набором опций, необходимых для ее использования и установить. Библиотека 'Qt' может компилироваться с целым набором различных опций. Сейчас же мы будем собирать библиотеку с включенной поддержкой gif reading, threading , STL, remote control, Xinerama, XftFreeType (anti-aliased шрифты) и X Session Management, не считая базовых характеристик.
Прежде чем продолжить, не забудьте установить некоторые переменные окружения, как показано ниже:
QTDIR=/usr/local/qt-x11-free-3.0.1 PATH=$QTDIR/bin:$PATH MANPATH=$QTDIR/man:$MANPATH LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export QTDIR PATH MANPATH LD_LIBRARY_PATH
Вы можете включить эти строки в файл .profile в вашем домашнем каталоге.
[root@Linux qt-x11-free-3.0.1]# ./configure -qt-gif -thread -stl -remote -xinerama -xft -sm [root@Linux qt-x11-free-3.0.1]# make install
Если все прошло успешно, то установку библиотеки 'Qt' можно считать завершенной.
Перед тем как начать писать программы на C++, использующие библиотеку 'Qt' , вам необходимо знать о существовании дополнительного инструментария, поставляемого вместе с библиотекой, который предназначен для облегчения вашего труда
Qmake -- генератор файлов Makefile на основе информации, содержащейся в файле
проекта -- '.pro'
.
Простой пример файла проекта:
SOURCES = hello.cpp HEADERS = hello.h CONFIG += qt warn_on release TARGET = hello
Где, 'SOURCES' указывает на файл с исходным текстом программы. Если в вашем проекте несколько таких файлов, то вы можете перечислить их так:
SOURCES = hello.cpp newone.cpp
или так:
SOURCES += hello.cpp SOURCES += newone.cpp
Аналогично, 'HEADERS' содержит имена заголовочных файлов. 'CONFIG' содержит информацию о конфигурации приложения Файл проекта должен иметь то же имя, что и исполняемый файл приложения, в нашем случае это 'hello.pro'.
Файл Makefile генерируется командой:
[root@Linux mydirectory]# qmake -o Makefile hello.pro
Qt Designer - это инструмент для визуального проектирования пользовательских интерфейсов. Разработка интерфейса проходит в режиме WYSIWYG, что очень удобно для экспериментирования с различными визуальными элементами. Designer генерирует чистый C++ код графического интерфейса. Вы сможете узнать больше о 'Qt Designer' в следующих статьях.
Давайте начнем. Напишем нашу первую программу 'Hello World'. С помощью любого текстового редактора наберите следующий код:
#include <qapplication.h>
#include <qpushbutton.h>
int main( int argc, char **argv )
{
QApplication a(argc, argv );
QPushButton hello( "Hello world!", 0 );
hello.resize( 100, 30 );
a.setMainWidget( &hello );
hello.show();
return a.exec();
}
Сохраните его как простой текст в файл ('hello.cpp'). Теперь создадим файл проекта (.pro) как приведено ниже:
TEMPLATE = app
CONFIG += qt warn_on release
HEADERS =
SOURCES = hello.cpp
TARGET = hello
Сохраните его под именем 'hello.pro' в тот же каталог, что и файл с исходным текстом программы, и создадим Makefile.
[root@Linux mydirectory]# qmake -o Makefile hello.pro
Скомпилируем программу командой 'make'
[root@Linux mydirectory]# make
Теперь можно попробовать запустить наше первое 'Qt' приложение командой:
[root@Linux mydirectory]# ./hello
На экране должно появиться нечто подобное: (здесь -- картинка типичного окна KDE с большой кнопкой:)
Теперь разберем каждую строку нашего кода. Первые две строки подключают заголовочные файлы, содержащие определения клавссов QApplication и QPushButton.
Запомните, что в приложении должен быть только один экземпляр класса QApplication.
Как и в других C++ программах, функция main() является точкой входа в программу. argc - количество аргументов командной строки, argv - массив аргументов командной строки.
В следующей строке эти аргументы передаются Qt:
QApplication
a(argc, argv)
После этого создается объект кнопка класса QPushButton и инициализируется конструктором с двумя аргументами: надпись на кнопке (label) и родительское окно (0 т.е., в данном случае, сама кнопка).
Устанавливается размер кнопки:
hello.resize(100,30);
Qt приложение может по выбору иметь главный виджет, при закрытии которого завершается исполнение приложения.
Выбор главного виджета производится в следующей строке:
a.setMainWidget( &hello );
Далее, главный виджет делается видимым. Вам потребуется всегда вызывать show(), чтобы сделать ваш виджет видимым
hello.show();
И наконец - передаем управление Qt.
return a.exec();
Важно запомнить, что функция exec() возвращает управление, когда приложение завершает свою работу.
Я работаю техническим консультантом по Linux/Java/XML/C++ в Нью Дели, Индия. Активно учавствую в проектах open-source на SourceForge. Люблю длительные поездки, теннис. Не прочь посмотреть кино или сходить к друзьям на вечеринку. Кроме того, я работаю в своей собственной консалтинговой компании, которая называется BroadStrike Technologies (http://www.broadstrike.com/).
Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван
Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн,
Андрей Киселев
Со всеми предложениями, идеями и комментариями обращайтесь к Сергею Скороходову ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.