Библиотека сайта rus-linux.net
Написание кода |
Создание приложения |
Написание кода
Еще раз убедитесь, что сохранили форму под именем 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: Почти готово
Сигналы и слоты |
Реализация слота |