|
Библиотека Qt.
Когда тебя родная мать ведет к зубным врачам,
Не бейся головой об пол, напрасных слез не лей,
А лучше стисни зубы так, как пленный партизан,
Чтоб не сумела их разжать толпа зубных врачей.
...
Григорий Остер.
Вообще, программировал под Linux я давно. Правда это было на Perl и не
"под Linux", а "из под Linux". Думая, что дело это сложное и требует большого напряга мозговых
извилин, я долго откладывал "разборки" с С++ на потом. Тем более, что повседневные задачи я решал
при помощи Perl и shell. А вот "потом", заинтересовала меня библиотека
Qt, о которой я много слышал, видел, но ни разу не попробовал.
Установив пакет qt-devel, я принялся за поиск документации к данной
библиотеке. Очень удивился, когда в каталоге /usr/share/doc/qt-devel-x.x.x обнаружилась хорошая
документация в HTML формате с описанием всех классов и функций библиотеки, а также примерами
программ. Хочу заметить, что раньше на С/С++ я кроме "Hello, World!" никаких программ не писал.
Впрочем, выручило знание Perl (синтаксис почти С-шный), а также OOPS!
Благополучно содрав этот самый 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
Проблемную часть вроде утрясли и переходим к вопросам общего характера.
Свой класс окна можно унаследовать от класса 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.
|