Программирование GUI в C++ с использованием библиотеки Qt, часть 1

Автор: (C) Gaurav Taneja ([email protected])
Перевод: (C) Андрей Киселев ([email protected])

 

В безбрежном океане библиотек для разработки 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

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

Qt Designer - это инструмент для визуального проектирования пользовательских интерфейсов. Разработка интерфейса проходит в режиме WYSIWYG, что очень удобно для экспериментирования с различными визуальными элементами. Designer генерирует чистый C++ код графического интерфейса. Вы сможете узнать больше о 'Qt Designer' в следующих статьях.

Hello World!

Давайте начнем. Напишем нашу первую программу '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() возвращает управление, когда приложение завершает свою работу.


Gaurav Taneja

Я работаю техническим консультантом по Linux/Java/XML/C++ в Нью Дели, Индия. Активно учавствую в проектах open-source на SourceForge. Люблю длительные поездки, теннис. Не прочь посмотреть кино или сходить к друзьям на вечеринку. Кроме того, я работаю в своей собственной консалтинговой компании, которая называется BroadStrike Technologies (http://www.broadstrike.com/).


Copyright (C) 2002, Gaurav Taneja.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 78 of Linux Gazette, May 2002

Команда переводчиков:
Владимир Меренков, Александр Михайлов, Иван Песин, Сергей Скороходов, Александр Саввин, Роман Шумихин, Александр Куприн, Андрей Киселев

Со всеми предложениями, идеями и комментариями обращайтесь к Сергею Скороходову ([email protected]). Убедительная просьба: указывайте сразу, не возражаете ли Вы против публикации Ваших отзывов в рассылке.