Sakhalin Linux Users Group

Библиотека Qt.

Когда тебя родная мать ведет к зубным врачам,
Не бейся головой об пол, напрасных слез не лей,
А лучше стисни зубы так, как пленный партизан,
Чтоб не сумела их разжать толпа зубных врачей.
...
Григорий Остер.

Вообще, программировал под Linux я давно. Правда это было на Perl и не "под Linux", а "из под Linux". Думая, что дело это сложное и требует большого напряга мозговых извилин, я долго откладывал "разборки" с С++ на потом. Тем более, что повседневные задачи я решал при помощи Perl и shell. А вот "потом", заинтересовала меня библиотека Qt, о которой я много слышал, видел, но ни разу не попробовал.

Установив пакет qt-devel, я принялся за поиск документации к данной библиотеке. Очень удивился, когда в каталоге /usr/share/doc/qt-devel-x.x.x обнаружилась хорошая документация в HTML формате с описанием всех классов и функций библиотеки, а также примерами программ. Хочу заметить, что раньше на С/С++ я кроме "Hello, World!" никаких программ не писал. Впрочем, выручило знание Perl (синтаксис почти С-шный), а также OOPS!

Download source: testapp.zip (3643) Благополучно содрав этот самый Qt-шный "Hello, World!" с документации, я убедился что он не компиляется. Точнее, компиляется, но линковщик выдает ошибку. Полдня потратив на ворошение документации по g++, которая кстати сказать весьма скудна, я вернулся к Qt документации. Где и обнаружил глубину моих заблуждений в разделе "Common Problems".Надо было так:
"g++ -I${QTDIR}/include -L${QTDIR}/lib -lqt hello.cpp".

Еще один подводный камень мне попался, когда оставив проклятый "Hello, World!" в покое я попытался написать собственный класс. Выяснилось, что спецы из TrollTech чтобы быть совсем уж "user fiendly" написали свой Meta Object Compiler (moc). Класс описывается довольно просто (похоже на Delphi), в него вставляется директива Q_OBJECT, а moc делает из всего этого пригодный к использованию cpp-файл, который компиляется как обьект. Вобщем, полный процесс выглядит примерно так:
moc -o moc_test.cpp test.h
g++ -c -I${QTDIR}/include -L${QTDIR}/lib -o moc_test.o moc_test.cpp
g++ -I${QTDIR}/include -L${QTDIR}/lib -lqt -o test test.cpp moc_test.o

100% Проблемную часть вроде утрясли и переходим к вопросам общего характера. Свой класс окна можно унаследовать от класса QMainWindow, который предоставляет собой типичное приложение с менюшками, статусной строкой и панелью инструментов. Также можно наследовать от базового класса QWidget и его многочисленных потомков QVBox, QHBox, QGrid, итд. Зависит от вашей фантазии и желаемого расположения элементов в окне приложения. Создание потомка базового класса в Qt намного проще, чем в том-же Delphi - нет никаких ненужных наворотов. Очень порадовало также наличие в библиотеке стандартных диалогов: QFontDialog, QFileDialog, итд.

Напоследок, о создании ui (User Interface). Есть в Qt такой визуальный редактор, называется Qt Designer. И результаты вашей деятельности сохраняются как файлы с расширением ui. Для преобразования XML формата ui в код С++, используется User Interface Compiler (uic). Подробно описывать не буду, в документации все просто и понятно. Минусы такого не супер удобного метода визуальной разработки приложений очевидны, но есть и свои плюсы - разработчику предоставляется возможность редактировать получающийся код как угодно.

(c) CADABER, июнь 2001.


Chat.Ru ПЕЙНЛЕМДСЕР: оПНХГБНДХРЕКХ,   РНБЮПШ,   НАНПСДНБЮМХЕ:   йХРЮИ,   хМДХЪ,   ъОНМХЪ,   яХМЦЮОСП   рЮИБЮМЭ