Qt Designer и KDevelop-3.0 для начинающих |
|
Версия 0.4
Copyright © 2001, 2003 Anne-Marie Mahfouf
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License".
Qt — это набор инструментов для разработки приложений с графическим интерфейсом, используемый проектом KDE. В этом документе описывается, как новичок может создать простое приложение, используя Qt Designer 3.2 и KDevelop-3.0 (эту программу также называют Gideon).
От переводчика: на момент написания этого перевода лишь малая часть интерфейса KDevelop была на русском языке.
При наличии перевода русские названия пунктов меню приведены в скобках.
Оригинал этого документа находится здесь:
http://women.kde.org/articles/tutorials/kdevelop3/index.html
Содержание
|
||
|
|
Введение |
Добавление виджетов |
Создание приложения |
Для начала мы вставим текст в верхней части окна нашей программы, как на рис. 4. Этот текст объясняет пользователю, как работать с программой. Такой тип виджета называется Label. Чтобы добавить его на форму, проделайте следующее:
В панели ToolBox выберите Common Widgets => TextLabel или выберите пункт меню Tools => Display => TextLabel;
Курсор над формой приобретет форму крестика. Точно так же, как вы бы делали это в программе для рисования, нарисуйте на форме прямоугольник. Будет создан виджет Label с некоторым текстом внутри;
Чтобы изменить этот текст, дважды щелкните на виджете и вместо "TextLabel1" введите "This program will create an email signature for you. Just fill in the boxes and hit the Create! button". Затем, чтобы включить выравнивание текста по центру, нажмите кнопку Align Center (предварительно выделив весь текст - прим. пер.). Кстати, заодно можно выделить слово Create! жирным шрифтом. Для этого нажмите кнопку с буквой "B".
Наконец, измените размер виджета, перетаскивая маленькие квадратики по его краям. Расположите виджет точно в центре, перетаскивая его мышью. Эти операции — всего лишь временные меры, позднее мы научимся более элегантному способу расположения виджетов.
Точно так же можно добавить любой виджет, поддерживаемый в Qt Designer: выберите его в панели виджетов, "нарисуйте" его на форме и, наконец, измените его свойства и размеры.
В Qt Designer есть интересная концепция: одни виджеты могут содержать в себе другие. Сейчас мы используем это, чтобы создать поля ввода внутри рамки. На рис. 8 вы видите, что несколько виджетов находятся внутри рамки. Этот виджет называется Group Box. Сначала мы создадим рамку, выбрав в панели виджетов Containers => Group Box или меню Tools->Containers->GroupBox. Создайте рамку прямо под только что созданной надписью. Измените заголовок рамки, выбрав параметр title в редакторе свойств. Введите в качестве значения этого параметра "Details". Обратите внимание на знак "+" слева от параметра title. Это означает, что у этого параметра есть еще дополнительные свойства, которые тоже можно изменить.
Когда вы создадите рамку (т.е. виджет GroupBox), поместите внутри нее три виджета Label. В окне Object Explorer (меню Window => Views => Object Explorer) вы заметите, что надписи стали дочерними объектами рамки (см. ниже на рис. 12).
Измените текст в надписях, дважды щелкнув по ним.
Теперь создадим поля ввода текста. В них пользователь будет вводить свое имя и адрес. Мы используем простейший тип поля ввода: виджет QLineEdit. Он позволяет пользователю ввести только одну строку текста. Добавьте два таких виджета: для ввода имени пользователя и его адреса. Выберите пункт меню Tools => Input => LineEdit и расположите виджет рядом с надписью 'Your name:'. Аналогично создайте поле ввода адреса.
Пользователь должен будет выбрать комментарий из выпадающего списка (виджет ComboBox) с тремя пунктами. Щелкните на значке ComboBox или выберите пункт меню Tools => Input => ComboBox. Поместите выпадающий список рядом с надписью Comment. Дважды щелкните на нем, чтобы вызвать диалог, в котором вы можете добавлять пункты списка. Нажмите кнопку 'New Item' и введите какое-нибудь остроумное высказывание в поле ввода справа. Точно так же создайте еще два пункта списка и нажмите кнопку OK.
Если нужно, измените размер виджетов, чтобы они были аккуратно расположены.
До этого момента мы не обращали внимание на имена добавляемых виджетов. Чтобы мы могли впоследствии обращаться к виджетам из кода, нужно указать их имя. Надписи (label) не производят никаких действий, поэтому давать им имя необязательно. А вот другим виджетам, например, полям ввода, мы сейчас присвоим имя, т.к. нам нужно будет считывать введенный в них текст. Не забудьте, что имена должны быть осмысленными. Изменить имя виджета можно, выбрав свойство name, первое в списке редактора свойств. Верхнее поле ввода текста мы назовем nameBox, а то, которое под ним — mailBox. Выпадающему списку присвойте имя commBox.
Наконец, мы создадим надпись 'Generated Signature', под ней — виджет TextEdit (Tools => Input => TextEdit) с именем sigBox, куда будет выводиться созданная программой подпись, и два виджета PushButton (кнопки 'Create!' и 'Cancel'). Расположите их внизу формы. Присваивать им имена необязательно, но если хотите, сделайте это.
Сохраните форму. Теперь вы можете увидеть, как она будет выглядеть при запуске программы, выбрав пункт меню Preview => Preview Form.
Рис. 13: Вид формы перед созданием макета
Разработка интерфейса программы |
Создание промежутков между виджетами |
Создание приложения |
|
Базовую структуру приложения (т.е. главное окно) можно легко и быстро создать при помощи KDevelop. Запустите KDevelop и в меню Project (Проект) выберите New Project (Создать проект). Появится мастер создания приложения. Выберите C++ => KDE => Simple KDE Application. Введите имя проекта (SigCreate), ваше имя и e-mail (рис. 1).
Нажмите Next (Далее), обратите внимание на опцию CVS и на шаблоны заголовков (они вставляются в начало каждого файла с исходным кодом). В последнем окне нажмите Finish (Готово). KDevelop создаст все файлы, необходимые для компиляции проекта. Вы можете использовать закладку File Selector (слева) для выбора файлов. Откройте 3 файла: main.cpp, sigcreate.cpp и sigcreate.h (рис. 2).
Когда мастер создания приложений закончит работу, вы можете убедиться, что все в порядке, скомпилировав приложение. Для этого выберите Build (Сборка) -> Run automake & friends, затем Build (Сборка) -> Run configure. В окне Messages (Сообщения) должно появиться следующее:
" Good - your configure finished. Start make now * * *** Success ***
Теперь вы можете выполнить команду Build (Сборка) -> Build Project (или просто нажмите F8). Затем выполните команды Build (Сборка) -> Install (Установить) и Build (Сборка) -> Execute program (Запустить программу) (или F9). Результат показан на рис. 3.
Рис. 3: Простое приложение для KDE
Теперь, когда мы создали основу, можно начать разработку приложения.
Если KDevelop не распознает автоматически переменные окружения QTDIR и KDEDIR, определите их значения вручную в диалоге Project (Проект) => Project Options... => Configure Options.
Рис. 6: Параметры проекта
Qt Designer — это программа для разработки пользовательского интерфейса программы.
Она помогает вам расположить на форме элементы управления и создать макет формы, чтобы при
изменении ее размеров виджеты располагались должным образом.
Рекомендую вам прочитать Руководство по Qt
Designer, чтобы узнать все о Qt Designer.
Qt Designer включает в себя редактор кода, но для этой цели мы все-таки будем использовать KDevelop.
Итак, сейчас мы создадим интерфейс приложения, используя Qt Designer. В Qt Designer формы сохраняются с расширением .ui, потому что затем эти файлы будут обработаны программой uic для создания файлов .cpp и .h. KDevelop сделает это за вас, поэтому все, что нам нужно — просто создать форму.
Всякий раз, когда вы добавляете или удаляете файлы из проекта (мы добавим файл пользовательского интерфейса с расширением .ui), требуется изменить файл Makefile.am. KDevelop сделает это, но вам нужно будет выполнить команду Build (Сборка) => Run automake & friends.
Выберите в окне KDevelop пункт меню File => New (Файл => Создать) и введите необходимую информацию в появившемся окне диалога. Сначала введите в качестве имени файла sigcreatedlg и выберите тип файла в выпадающем списке. Сейчас нам потребуется создать файл типа Widget (.ui). Обязательно проверьте, отмечен ли флажок "Add to project" (Добавить в проект), иначе файл Makefile.am не будет обновлен.
Нажмите кнопку OK. Появится диалог Automake manager.
Нажмите кнопку ОК.
Если только что созданный sigcreatedlg.ui не был автоматически открыт в Qt Designer, откройте Automake Manager (закладка в правой части главного окна), щелкните на файле правой кнопкой мыши и выберите Open With (Открыть с помощью), и в появившемся меню выберите пункт Qt Designer.
К имени файла .ui принято добавлять "dlg", чтобы облегчить чтение кода другим людям. sigcreatedlg обозначает, что этот файл — это класс интерфейса. Обычно имена классов KDE начинаются с заглавной буквы K, и затем следует имя, наиболее полно описывающее вашу программу. Если бы это было настоящее приложение для KDE, мне нужно было бы назвать этот класс KSigCreate.
Окно программы Qt Designer поделено на три части. С левой стороны находится список элементов управления. Справа могут находиться несколько диалогов; я же оставляю только диалог свойств Property Editor (закрыв два остальных). Здесь вы можете настроить внешний вид и поведение виджетов. Можно выбрать размер, цвет виджета и т.д. Посередине находится форма — окно вашего приложения. Здесь вы и разрабатываете интерфейс программы.
После добавления в проект файла sigcreatedlg.ui вам нужно выполнить команду Build (Сборка) => Run Automake & friends и Run Configure. Иначе при компиляции программы изменения в файле Makefile.am не будут учтены.
Словарь |
Разработка интерфейса программы |
Авторы и лицензия. |
|
|
Автор руководства: (с)2001-2003 Anne-Marie Mahfouf <annma AT kde DOT org>
Участники в создании документа:
Глава "Перевод простого проекта KDE": Thomas Nagy <tnagy NOSPAM eleve DOT emn DOT fr>
Этот документ распространяется на условиях GNU Free Documentation License.
Перевод простого проекта KDE |
|
Разработка интерфейса программы |
Создание приложения |
Когда вы работаете с Qt Designer, вам нужно иметь четкое представление о том, как будет выглядеть ваша будущая программа. На рис. 8 показан внешний вид программы SigCreate по окончанию разработки. Виджеты расположены в окне так, чтобы помочь пользователю ввести информацию в нужные поля ввода. При разработке программы попытайтесь взглянуть на интерфейс глазами пользователя. Делайте все так, чтобы использование программы не представляло сложностей.
Примечание переводчика: я долго думала, нужно ли мне переводить не только текст этого документа, но и интерфейс программы, которую мы сейчас создаем. Общепринято писать программу на английском языке, а потом делать ее перевод на свой язык, поэтому я так и сделаю — оставлю все надписи на английском.
Наша программа будет создавать подпись для электронных писем и отображать ее на экране. Пользователю нужно будет свое имя, e-mail и выбрать один из трех комментариев. При нажатии кнопки Create! созданная подпись должна показываться в элементе управления MultiLineEdit. Выйти из программы можно, нажав кнопку Cancel.
Этот проект был задуман только для обучения, поэтому навряд ли может быть как-то использован на практике.
В правой части окна Qt Designer находится редактор свойств, в котором показаны различные параметры созданной вами формы. Первая строка показывает имя формы: Form1. Щелкните по полю ввода и измените это имя на SigCreateDlg. Это задает имя класса диалога, поэтому нужно ввести осмысленное имя.
Теперь вы знаете, как изменяются свойства виджетов: нужно щелкнуть на имени свойства и в поле ввода справа от имени изменить значение. Измените свойство Caption на "SigCreateDlg v 0.1"
Сейчас мы начнем добавлять виджеты на форму.
Создание приложения |
Добавление виджетов |
Как получить KDevelop 3 |
Требования |
KDevelop 3 сейчас называется Gideon (он будет переименован обратно c выпуском стабильного релиза). Поэтому исполняемый файл программы называется gideon. В некоторых дистрибутивах пакет с этой программой может называться Gideon или KDevelop-3.
Если вы не нашли KDevelop-3 для вашего дистрибутива, прочитайте следующий раздел, чтобы узнать, как получить исходники KDevelop-3 и скомпилировать их.
Вы можете загрузить KDevelop с ближайшего к вам зеркала, указанного в разделе Download. На момент написания последняя версия KDevelop была 3.0beta2.
Для компиляции KDevelop 3 потребуется Qt версии 3.1.0 или выше и kdelibs версии 3.1.0 или выше. Переменные окружения QTDIR и KDEDIR должны указывать на каталоги, куда установлены соответствено Qt и kdelibs.
Не забудьте настроить пути к KDE и Qt. Чаще всего ошибки при компиляции происходят из-за того, что переменные окружения не настроены должным образом. Выполните в консоли команду "set", чтобы увидеть все переменные окружения и их значения (список может быть довольно большим, поэтому для проверки определенной переменной выполняйте команду set | grep имя_переменной, например, set | grep PATH - прим. пер.). Вам нужно установить значения переменных PATH и LD_LIBRARY_PATH:
export PATH=$QTDIR/bin:$KDEDIR/bin:$PATH export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
Если у вас возникают пролемы с компиляцией и запуском KDevelop, вы можете задать свой вопрос в форуме.
Если вы в первый раз работаете с KDevelop, попробуйте создать пустой проект и скомпилировать его, чтобы привыкнуть к интерфейсу и значкам программы.
Краткое описание действий для тех, кто хочет получить самую свежую версию KDevelop. Версия KDevelop из CVS действительно стоит того, чтобы установить ее. Вам потребуются Qt >= 3.1.0 и kdelibs >=3.1.0.
mkdir KdevelopCVS cd KDevelopCVS export CVSROOT=:pserver:anonymous@anoncvs.kde.org:/home/kde cvs login (нажмите ENTER вместо ввода пароля) cvs co kdevelop
Когда загрузка закончится:
make -f Makefile.cvs ./configure --prefix='kde-config --prefix' make make install (нужны привилегии root)
Подробнее все это описывается в инструкциях по установке на сайте KDevelop.
Требования |
Словарь |
Вкратце |
|
Краткое описание действий в KDevelop и Qt Designer.
В меню KDevelop выберите пункт File => New (Файл => Создать), выберите тип файла Widget (.ui) и присвойте ему имя, например, kprojectdlg, отметьте флажок Add To Project (Добавить в проект). Нажмите ОК.
Запустится Qt Designer. Создайте форму, поместите на нее элементы управления, сохраните и выйдите из Qt Designer. На закладке File Groups этот файл появится в группе User Interface (kprojectdlg.ui).
Создайте класс с именем KProject (Project => New class... (Проект => Новый класс). Этот класс будет унаследован из файла диалога (kprojectdlg) и является дочерним классом QWidget.
Создайте слоты и другие сигналы или методы в унаследованном классе KProject.
Реализация |
Перевод простого проекта KDE |
Введение |
|
Чтобы сделать что-то полезное в Qt Designer, нам для тренировки нужно сначала создать небольшую программу, которая покажет вам мощь Qt Designer и KDevelop. Надеюсь, этот документ поможет вам в создании вашей первой программы для KDE..
Если вы уже хорошо знакомы с KDevelop и Qt Designer, сразу переходите к четвертой главе, где кратко описывается, что нужно сделать.
KDevelop поможет вам создать законченное приложение для KDE. Проект KDE использует утилиты autoconf и automake, так что KDevelop создаст все необходимое для их работы (каталог admin, Makefile.cvs, Makefile.am, и т.п.).
Qt Designer и KDevelop-3.0 для новичков |
Требования |
Словарь |
Требования |
Виджет: виджет, или элемент управления — это часть графического интерфейса, например, кнопка или поле для ввода текста.
Макет: это слово обозначает способ расположения виджетов в окне. В простейшем случае элемент может быть помещен в определенное положение и ему могут быть приданы определенные размеры. Но когда пользователь изменяет размер окна, виджеты должны оставаться на своем месте и при этом соответственно изменять размер. Linux позволяет сделать это, поместив виджеты в макет.
Сигнал и слот: Сигналы и слоты используются для связи между объектами. Механизм сигналов и слотов является важнейшей возможностью Qt. Сигналы исходят от объектов, когда те меняют свое состояние так, что это изменение потребуется зафиксировать и выполнить в связи с ним какие-либо действия. Слоты могут быть использованы для получения сигналов. Слоты — это методы. Вы можете подключать сколько угодно сигналов к одному слоту, и сигнал может быть подключен к любому количеству слотов. Подробнее о слотах и сигналах рассказывается в документации Trolltech. В документации, поставляемой с Qt вы найдете описания сигналов и слотов для каждого класса. Вы можете реализовать свои собственные слоты.
Как получить KDevelop 3 |
Создание приложения |
Реализация слота |
Создание приложения |
Когда мы нажимаем на кнопку Create!, наша программа должна отображать подпись в поле ввода (виджет TextEdit). Вам стоит прочитать документацию к Qt, чтобы узнать, какие сигналы и слоты уже доступны для определенного виджета. Например, взгляните на описание класса QPushButton (или откройте файл /usr/lib/qt/doc/html/qpushbutton.html - прим. пер.). Он наследуется из класса QButton, и поэтому в документации к QButton вы найдете список доступных сигналов.
Сигналы void pressed () void released () void clicked () void toggled ( bool on ) void stateChanged ( int state )
Нам понадобится сигнал clicked() кнопки Create!.
Так как класс SigCreate является производным от класса SigCreateDlg, мы реализуем слот в классе SigCreate. Это будет публичный метод. Добавьте в файл sigcreate.cpp следующие строки:
void SigCreate::slotCreateSig() { sigBox->append("\n--"); sigBox->append(nameBox->text()); sigBox->append(mailBox->text()); sigBox->append(commBox->currentText()); }
и, разумеется, этот метод нужно объявить в файле sigcreate.h:
public slots: virtual void slotCreateSig();
Из приведенного выше кода видно, что в sigBox (виджет TextEdit) сначала будет добавлена строка "--", затем текст из nameBox (ваше имя), затем e-mail и комментарий. append() — это метод класса QTextEdit, подробнее обо всех методах можно прочитать в документации к классу QTextEdit. Вы сможете найти нужный вам метод и узнать о возможностях виджета.
Рис. 20: Работает!
Еще пара слов о сигналах и слотах. Этот механизм безопасен: сигнатура сигнала должна совпадать с сигнатурой слота-приемника (например, valueChanged(int) может быть соединен только со слотом, тип аргумента которого — int). Также не забудьте, что все классы, унаследованные из QObject или одного из его подклассов (например, QWidget), могут содержать сигналы и слоты.
Все строки, использованные в программе для KDE, должны быть заключены в функцию i18n() (не забудьте добавить заголовочный файл klocale.h: #include klocale.h), т.к. все проекты KDE переводятся на разные языки. Об интернационализации подробно рассказывается в документе KDE Translation HowTo. В Главе 5 этого руководства также рассказано, как сделать перевод вашего приложения.
Если вам нужна помощь, вы можете послать мне письмо или поговорить со мной по IRC: сервер irc.openprojects.net, канал #kde-women или #kde-devel, мой ник — annma. (пишите автору по-английски - прим. пер.)
Исходники проекта SigCreate лежат здесь.
Написание кода |
Вкратце |
Требования |
|
Чтобы выполнять действия, описанные в этом документе, вам потребуются:
Qt Designer входит в состав Qt версии 3.1.x и выше. Если у вас установлена более ранняя версия, обновите её хотя бы до 3.1.x. На момент написания текущая версия Qt была 3.2 (а на момент перевода — 3.3 - прим. пер.).
Проверьте, установлены ли все связанные с Qt пакеты. Для компиляции программ вам потребуются заголовочные файлы, обычно находящиеся в пакете qt-devel. Также убедитесь, что установлен Qt Designer, т.к. в некоторых дистрибутивах эта программа находится в отдельном пакете.
Чтобы проверить, все ли необходимое есть в вашей системе, выполните следующую команду:
locate qstring.h
Если на экране появится что-то вроде /usr/lib/qt3/include/qstring.h , тогда вы можете присвоить переменной окружения QTDIR значение /usr/lib/qt3/. В оболочке bash для этого нужно ввести
export QTDIR=/usr/lib/qt3
Вы можете скачать Qt с сайта компании Trolltech или загрузить модуль qt-copy из cvs. Qt для Linux распространяется на условиях GPL (это не совсем так. Есть еще и платная версия, включающая в себя некоторые дополнительные возможности, и которая, в отличие от свободно распространяемой версии, может быть использована для разработки проприетарных программ - прим. пер.)
Если вы не знаете, каким образом можно загрузить копии модулей qt-copy и kde и скомпилировать их, прочитайте документ об использовании анонимного cvs.
Вы должны установить в качестве значения переменной окружения QTDIR полный путь к каталогу, в который вы установили Qt. В оболочке bash, например, можно ввести:
export QTDIR=/usr/local/qt
если, конечно, /usr/local/qt действительно является каталогом с установленным Qt. Подробнее об установке Qt написано в файле INSTALL.
Затем скопилируйте Qt при помощи следующих команд:
./configure -system-zlib -qt-gif -system-libpng -system-libjpeg \ -plugin-imgfmt-mng -thread -no-exceptions -debug -fast make
Выполнять команду make install не нужно.
Qt Designer находится в каталоге, куда вы установили Qt, в подкаталоге bin. Вы можете запустить Qt Designer следующей командой:
/usr/local/qt/bin/designer
По адресу http://hr.uoregon.edu/davidrl/kde/qt.html находится подробное объяснение того, как скомпилировать Qt из tar-архива.
Введение |
Как получить KDevelop 3 |
Сигналы и слоты |
Создание приложения |
Сигналы и слоты используются для связи между объектами Qt. Механизм сигналов и слотов является важнейшей возможностью Qt и, возможно, тем, чем Qt больше всего отличается от остальных инструментариев, часто использующих использующих механизмы обратной связи. Сигналы исходят от объектов, когда происходит какое-то событие, например, пользователь печатает что-то в поле ввода или нажимает кнопку. Слот — это просто функция, вызываемая в ответ на определенный сигнал.
Теперь, когда добавлены все необходимые виджеты и создан макет формы, остается создать соединения сигналов и слотов. Это можно сделать вручную при помощи функции connect(), но в Qt Designer есть простой и эффективный способ — утилита соединения (Connection Tool). Для ее запуска либо нажмите кнопку на панели инструментов (на ней нарисована красная стрелка и зеленый прямоугольник), либо выберите пункт меню Tools => Connect Signals/Slots, либо просто нажмите F3. Чтобы создать соединение, щелкните на виджете, с которым должен взаимодействовать слот, перетащите появившуюся линию на форму и отпустите кнопку мыши.
Сначала займемся кнопкой Create!. Щелкните на значке Connect Signal/Slot, выберите соответствующий пункт из меню Tools или нажмите F3. Затем щелкните на кнопке Create! и перетащите линию за пределы формы. Когда вы отпустите кнопку мыши, на экране появится диалог, показанный на рис. 17.
Нам нужно создать слот (не забывайте, что слот — это функция), который будет выводить подпись при нажатии кнопки Create!. Сигнал, который будет выдан при нажатии кнопки, называется clicked() (для виджета QPushButton существует пять сигналов), и нам нужно создать для него слот и соединение.
Чтобы создать слот, щелкните на кнопке "Edit Slots". Появится окно создания слота (см. рис. 16). Щелкните на кнопке New Slot и в списке появится новый слот. Вместо new_slot() введите slotCreateSig(). В выпадающем списке Access должно стоять значение public. Когда вы нажмете ОК, вы вернетесь к диалогу View and Edit Connections, где в списке слотов увидите только что созданный.
Рис. 17: Диалог просмотра и редактирования соединений
Чтобы создать соединение, нужно просто выбрать нужный сигнал (в нашем случае — clicked()) и слот (созданный нами slotCreateSig()). Когда вы выбрали сигнал и слот, вы увидите, что слева появится зеленая галочка. Теперь нажмите ОК.
Повторите ту же операцию для кнопки Cancel, используя сигнал clicked() и слот close(). На этом создание сигналов и слотов завершено.
Создание промежутков между виджетами |
Написание кода |
Написание кода |
Создание приложения |
Еще раз убедитесь, что сохранили форму под именем sigcreatedlg.ui и закройте окно Qt Designer. Если вы откроете этот файл в своем любимом текстовом редакторе, то увидите, что код в этом файле написан не на С++, а на XML. Вместе с Qt Designer поставляется специальная программа uic, преобразующая файл .ui в файлы .h и .cpp. KDevelop запускает ее автоматически.
Если по какой-либо причине KDevelop не создал из sigcreatedlg.ui файлы .h и .cpp, введите в консоли следующие команды, находясь в каталоге sigcreate/src/:
uic -o sigcreatedlg.h sigcreatedlg.ui uic -o sigcreatedlg.cpp -i sigcreatedlg.h sigcreatedlg.ui
Теперь нужно унаследовать созданный KDevelop'ом класс SigCreate из класса диалога, созданного в Qt Designer. Для этого откройте в Kdevelop файл sigcreate.h, выбрав его на закладке File Selector (в левой части окна KDevelop) и добавьте строку
#include "sigcreatedlg.h"
наверх файла sigcreate.h, со всеми остальными необходимыми заголовочными файлами:.
#include <kapplication.h> #include <qwidget.h> #include <qlineedit.h> #include <qmultilineedit.h> #include <qcombobox.h> #include <sigcreatedlg.h> /** SigCreate is the base class of the project */ class SigCreate : public SigCreateDlg {
Замените public KMainWindow на public SigCreateDlg, т.к. SigCreate наследуется из SigCreateDlg.
В файле sigcreate.h должны быть такие строки:
class SigCreate : public SigCreateDlg { Q_OBJECT public: /** constructor */ SigCreate(QWidget *parent=0, const char *name=0); /** destructor */ ~SigCreate(); };
Файл sigcreate.cpp должен выглядеть так:
#include "sigcreate.h" SigCreate::SigCreate(QWidget *parent, const char *name) : SigCreateDlg(parent, name) { } SigCreate::~SigCreate() { }
Вам также нужно вручную добавить заголовочные файлы. Добавьте в sigcreate.h три использованных нами класса:
#include <qlineedit.h> #include <qcombobox.h> #include <qmultilineedit.h>
Закомментируйте следующие строки в файле main.cpp:
/* if (app.isRestored()) { RESTORE(SigCreate); } else*/
т.к. проект основан на классе KMainWindow, который значительно упрощает работу.
Эта программа предназначена для обучающего курса, поэтому она не всегда отражает реальный ход программирования. На самом деле, после включения в проект файла .ui нужно создать класс SigCreate. Для этого выберите пнукт меню Project => New Class... (Проект => Новый класс). Появится диалог создания класса. Введите имя класса (SigCreate) и имя базового класса (SigCreateDlg). Обязательно отметьте флажок "generate a QWidget-childclass" (Генерировать класс, производный от QWidget), и нажмите ОК. Мы не сделали всего этого, т.к. класс SigCreate — главное окно нашей программы.
Теперь, чтобы проверить, что все в порядке, мы можем запустить проект. Выполните команды Build => Run automake & friends, затем Build => Run configure, Build => Build Project и Build => Install. Должно появиться окно программы (см. рис. 19), но кнопка Create! не будет работать. Нам еще предстоит реализовать слот slotCreateSig().
Если во время компиляции появляется такая ошибка: Syntax error before `{' token", ссылаясь на открывающую скобку перед строкой Q_OBJECT в файле sigcreate.h, значит вы забыли добавить
#include "sigcreatedlg.h"
или файл sigcreatedlg.h не был создан (см. замечание выше).
Рис. 19: Почти готово
Сигналы и слоты |
Реализация слота |
Создание промежутков между виджетами |
Создание приложения |
В этом разделе описывается создание макета формы. Если вы, включив предварительный просмотр формы (Ctrl+T), измените размер окна, то увидите, что все виджеты не изменяют размер и остаются на своих местах. Поэтому нам нужно использовать такую возможность Qt, как "распорки" (spacers). Распорки — это как бы пружины, отталкивающие виджеты друг от друга.
Научиться использовать распорки и управлять макетом можно только путем проб и ошибок. Главное — помнить, что при работе с распорками их нужно расставлять сначала горизонтально, и только потом — вертикально.
Для начала мы используем распорки для центрирования верхней надписи. Измените размер надписи так, чтобы она занимала как можно меньше места, но при этом полностью вмещала текст. Добавьте две распорки, по одной с каждого края. Для этого нажмите значок с нарисованной на нем пружиной или выберите пункт меню Layout => Add Spacer. Щелкните по пустому месту слева от надписи и выберите Horizontally. Появится синяя распорка (см. рис. 14). Повторите ту же операцию справа от надписи. Затем добавьте распорку справа от надписи 'Generated Signature' и еще одну справа от кнопки 'Create!'.
Рис. 14: Добавление распорок
Теперь, когда мы заполнили пустое место распорками, нам нужно создать макет, который позволит виджетам изменять свой размер при изменении размеров формы. Создание хорошего макета — важный этап разработки программы. Опять же, попробуйте несколько раз изменить размер формы, чтобы проверить, все ли в порядке. Мы можем использовать вертикальную или горизонтальную ориентацию, а также привязку к сетке. Верхний ряд виджетов расположен горизонтально (распорка + надпись + распорка), поэтому тут нужно применить горизонтальную ориентацию. Выделите одновременно три виджета: щелкните на первой распорке, затем, удерживая клавишу Shift, щелкните по надписи и затем на второй распорке. Нажмите кнопку Horizontal Layout на панели инструментов или выберите пункт меню Layout => Lay Out Horizontally. Вокруг трех выбранных объектов появится красная линия, показывающая, что объекты были объединены в макет. При необходимости вы можете изменить размер красного прямоугольника.
Теперь мы можем повторить эту операцию для трех надписей внутри виджета GroupBox (на этот раз используя вертикальную ориентацию), и для двух полей ввода и выпадающего списка. В данном случае лучше использовать вертикальную ориентацию, чтобы объекты были выровнены. Если бы мы использовали горизонтальную ориентацию для каждой надписи и поля ввода, их размер и положение изменялись бы неправильно. Для надписи 'Generated Signature' и распорки, а также для двух кнопок и распорки между ними требуется горизонтальная ориентация.
Наконец, нам нужно поместить все элементы управления в сетку (grid). Щелкните правой кнопкой по форме и выберите "Lay Out in a Grid". Результат изображен на рис. 15.
Добавление виджетов |
Сигналы и слоты |
Перевод простого проекта KDE. |
|
$ tar xvzf gettext-0.10.35-kde.tar.gz $ cd gettext-0.10.35-kde $ ./configure $ make $ mkdir -p ~/bin $ cp src/gettext src/xgettext ~/bin # копируем gettext и xgettext в каталог HOME/bin $ export PATH=~/bin:$PATH
Перейдите в каталог с вашим проектом:
$ cd /путь/к/проекту
Установите в качестве значения переменной окружения KDEDIR каталог, куда установлен KDE — в Mandrake это /usr (а в Slackware — /opt/kde - прим. пер.). Каталог KDE можно узнать, введя команду "kde-config --prefix".
$ export KDEDIR=`kde-config --prefix` # или export KDEDIR=/usr
Затем создайте файлы переводов:
$ make -f admin/Makefile.common package-messages
При помощи kbabel переведите .po файлы в каталоге po/ вашего проекта.
Не переводите файл .pot!
$ make package-messages $ sudo make install
Оригинал этой главы находится здесь, спасибо Thomas Nagy.
Вкратце |
Авторы и лицензия |