RDM/2 The Russian Electronic Developer Magazine  
RDM/2 Русский электронный журнал разработчика  
ДомойОт редактораПишите намОбратная связьRU/2

Что такое Qt.

Те, кто программировал графический пользовательский интерфейс для XWindow знает что основным средством для этого служит система OSF Motif. Также известно насколько это тяжелый труд программировать графику в этой среде. Для тех же, кто не знает могу привести сравнение: XWindow это программирование на уровне машинных кодов (это только сравнение!), а Motif это примерно уровень ассемблера. Конечно мы имеем очень большую гибкость, можем работать на уровне графического ядра иксов но взамен получаем гигантскую трудоемкость написания даже простейших программ и большие проблемы в изучении системы (литература в нашей стране пока не продается а хороших файлов помощи нет), а также невозможность использования C++. Есть ли возможность обойти это проблемы? Да, и этих путей несколько. Один из них - использовать систему Qt, созданную норвежской организацией TrollTech.

Итак что такое Qt. Изначально это была система для программирования пользовательского интерфейса на более высоком уровне чем Motif. Если продолжать наши сравнения, то это уровень языков высокого уровня. В систему сразу же вошли средства для создания widget (это очень упрощенно говоря окно), различных диалогов, кнопок и т.п. И при этом было условие, что Вы не можете использовать стандартную графическую систему: или Qt или ничего. В последних версиях начиная примерно с 1.36 можно практически свободно использовать стандартный интерфейс. Хотя необходимость в это возникает очень редко, поскольку система функций Qt сильно увеличилась и трудно придумать то, чего там нет или чего нельзя было бы сделать средствами Qt. Хотя Qt осталась системой для программирования интерфейса она включает в себя обширные средства, облегчающие программирование неинтерфейсных объектов. Так, например, в систему входит развитый класс итераторов для управления списочными структурами, в системе присутствуют очень сильные средства работы с графикой и изображениями (они уступают пожалуй только gtk). Кроме этого в Qt включена работа с файлами, потоками ввода-вывода.


Что входит в Qt.

Qt можно разделить на следующие составляющие:

Создание приложения с помощью Qt обычно начинается с составления скелета интерфейсной части программы, а именно с создания аппликации и основного widget, в который в будущем будут помещаться остальные элементы интерфейса - диалоги, другие widget. С помощью функций, входящих в аппликацию можно установить позиционирование окон на desktop, а при помощи основного widget установить размеры окна, типы шрифтов, перехват мыши и клавиатуры. Например, при помощи этих функции можно захватить управление мышью не только когда она находится над нашим окном, но и в любом месте экрана, изменять цвет desktop и пр. Обычно скелет программы создают при помощи вспомогательных программ, например, QtArchitector (написанной также на Qt). Они позволяют вчерне установить нужные окна, создать диалоги, задать обработчики событий.

Создание приложения невозможно без наличия документации. Qt выгодно отличается от других сред наличием очень подробной, хорошо структурированной и удобной документации в формате html (с использованием его возможностей) и хорошо проработанным примерами. Также присутствует tutorial, позволяющий разобраться на начальным этапом создания программы. Кроме этого в TrollTech создали off-line конференцию в виде листа рассылки, где можно задать вопрос о вашей проблеме и почти наверняка найти ответ на свой вопрос.

Одной из важнейших отличительных особенностей Qt является механизм connect-ов. Если в традиционных средствах обычно события приходящие от кнопок, от меню и пр. приходили в виде одного события Command с последующей идентификацией, что это и кто его прислал, то в Qt каждый элемент интерфейса имеет так называемый SIGNAL, который можно с помощью команды connect присоединить к уже определенному или созданному программистом SLOT, который представляет собой обычный метод C++.
например, мы хотим обработать некоторый набор RadioButton. Обьеденяем их в ButtonGroup и пишем

connect (buttongroup,SIGNAL(Clicked(int)),mywidget,SLOT(ResClic(int)));
в результате когда происходит нажатие на одну из кнопок, автоматически вызывается слот с номером кнопки в качестве параметра. Очевидно, что механизмом connect можно связывать не только элементы интерфейса, но и обычные widget. Таким образом мы получаем мощный механизм разработки многооконных приложений, которые работают независимо. Отпадает необходимость в создании общих массивов данных и прочих не очень удобных вещах.

Еще одна очень приятная черта Qt это его мультиплатформенность. Я это проверил на собственной практике. Изначально мое приложение писалось для Sun/Solaris, но после перекомпиляции программа прекрасно заработала в XFree86/2. и в штатнм IBMовском PMX.

Что вам понадобится.

Итак, если я заинтересовал кого-либо этой замечательной средой, то осталось выяснить что для ее установки надо и как ее произвести.
  1. Для начала вам необходим компилятор. Предпочтительнее, если это будет gcc 2.7.2.* из пакета EMX 0.9c fix4 develop. (2.8.1 из 0.9d не рекомендуется, поскольку в нем есть ошибки экспорта и вы потеряете возможность использовать drag&drop и вообще, насколько я знаю, нормально с gcc 2.8.1 никто Qt не откомпилировал; хотя вы можете спокойно использовать runtime из 0.9d)

  2. Вам необходим XServer. Я могу предложить XFree86/2 (что это и с чем его едят можно прочитать на RU/2 в цикле статей Платона Фомичева - раздел "Технологии OS/2"). Если вы не хотите ставить такой большой Xserver, могу предложить поменьше и менее удобный, зато работает прямо в PM. Это PMX.

  3. Очень желательны, но не обязательны UNIX-овые утилиты: rm, sed и пр. Их можно найти на Hobbes.

  4. Ну и наконец, вам нужен сам Qt. Берется он непосредственно с сервера TrollTech. Брать лучше всего версию 1.41. По моему мнению, она самая качественная на данное время (хотя не самая последняя).

Установка.

Как устанавливать gcc и XServer я вам рассказывать не буду. Об этом лучше почитать соответствующие доки и статьи. Отмечу только, что при установке gcc необходимо сформировать OMF библиотеки (как это делается написано в doc по установке в поставке emx).

Установка Qt происходит следующим образом:

  1. Распаковываем содержимое архива с Qt с помощью утилиты untgzos2.
  2. Распаковываем файл qt141p.zip с помощью unzip. При этом часть файлов должна перезаписаться.
    Заходим в каталог qt/src и в файле qtos2.rsp исправляем пути.
  3. Переименовываем каталог qt-1.41 в qt.
    Устанавливаем в config.sys переменную SET QTDIR=e:\USR\LOCAL\QT (у вас - где находится каталог Qt). Делаем Reboot и переходим в этот каталог.
  4. ОБЯЗАТЕЛЬНО выполняем действия описанные в README.OS2
  5. Выполняем следующие команды.
    Если у вас есть вышеозначенные утилиты (sed, rm...)
    1. make emx-gcc-shared
    2. make
    После этого идем пить чай. Компиляция занимает примерно 30 минут.
    Проверьте, откомпилировалось ли содержимое каталогов examples и tutorial, если нет то просто зайдите в них и дайте команду make.

    Если у вас этих утилит нет, то начинайте простую но рутинную работу.

    1. make emx-gcc-shared
      После того как propagate закончит работу берем в руки текстовый редактор.
      Обходим все каталоги в поисках Makefile. Берем его содержимое и вставляем в лежащий тут же рядом Makefile-in в раздел system-depended, затирая при этом сообщение об ошибке находящееся в нем.
      Переименовываем Makefile.in в Makefile.
    2. В каталоге qt/src/moc набираем make. Копируем полученный moc.exe в qt/bin
    3. В каталоге qt/src/moc набираем make. После окончания компиляции (через 15 мин) получаем на выходе qt.dll и выполняем команды:
      emximp -o qt.a qtos2.def
      emximp -o qt.lib qtos2.def
      после чего копируем qt.dll qt.lib qt.a в каталог qt/lib
    4. Далее заходим в каталоги tutorial и examples и выполняет там команду make.
  6. Проверить установку можно запустив какой-нибудь пример или tutorial.
    Если при запуске программа пишет, что не удается зацепить Xserver, то значит он у вас не запущен или переменная DISPLAY установлена неправильно.

Если появятся какие проблемы вы всегда можете спросить у меня.
e-mail: alex@main.sdg.neva.ru
Алексей Александрович Галкин.

Меня переодически можно найти на irc канале #OS2russian в EFnet под именем |Kovu|.

The Qt logo and Troll Tech logo are copyright Troll Tech AS. Qt is a trademark of Troll Tech AS. The PMX are copyright IBM Corp. Solaris is a trademark of Sun Corp.

---
Интересные ссылки:

---

---
Комментариев к странице: 0 | Добавить комментарий
---
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов
(C) Russian Underground/2