Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPO_SRS.doc
Скачиваний:
5
Добавлен:
02.05.2019
Размер:
1.06 Mб
Скачать

5.8. Написання коду

Ще раз переконайтеся, що зберегли форму під ім'ям 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 а 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: Майже готово

Реалізація слота

Коли ми натискаємо|натискуємо| на кнопку 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Ви зможете знайти потрібний вам метод і дізнатися про можливості|спроможності| виджета|.

Наново|заново| скомпілюйте проект (Build (Збірка|зборка,збирання|) =>Build Project, потім Build =>Install). І ось|от| що у|в,біля| вас повинно вийти:

Мал. 20: Працює!

Ще пара слів про сигнали і слоти. Цей механізм безпечний: сигнатура сигналу повинна співпадати|збігатися| з|із| сигнатурою слота-приймача (наприклад, valueChanged(int) може бути сполучений|з'єднаний| тільки|лише| із|із| слотом, тип аргументу якого — int). Також не забудьте, що всі класи, успадковані з|із| QObject або одного з його підкласів (наприклад, QWidget), можуть містити|утримувати| сигнали і слоти.

Всі рядки, використані в програмі для KDE, повинні бути поміщені|ув'язнені| у функцію i18n() (не забудьте додати|добавити| заголовний файл klocale.h: #include klocale.h), оскільки всі проекти KDE перекладаються різними мовами.

Контрольні питання і завдання:

  1. Що таке виджет, макет, слоті сигнал?

  2. Яке основне призначення додатків KDevelop і Qt Designer?

  3. Як створити графічний інтерфейс заданого вигляду додатку за допомогою Qt Designer?

  4. Яке призначення розпірок при створенні макету форми?

  5. Як створити з’єднання сигналів і слотів?

  6. Як виконати реалізцію коду слотів за допомогою KDevelop

Завдання:

Розробити додаток|застосування| з|із| графічним інтерфейсом, що реалізовує наступне завдання|задавання|:

  1. Одержати|отримати| наступну|слідуючу| системну інформацію:

    • ім'я операційної системи, номер версії і модифікації ядра;

    • ім’я командного інтерпретатора;

    • ім’я поточного каталога.

  2. Використовуючи Системний монітор KDE:

  • проаналізувати завантаження|загрузку| системи за одну хвилину;

  • проаналізувати завантаження|загрузку| процесора за одну хвилину

  • визначити тактову частоту процесора.

  1. Розробити програму, що ілюструє методику використання розподілюваної пам’яті.

Для створення|створіння| додатку|застосування| можна вибрати візуальне середовище|середу| розробки додатків|застосувань| для ОС Linux KDevelop (компіляція, компоновка|компонування|), а для проектування графічного інтерфейсу користувача можна використовувати Qt Designer. Це полегшить роботу над додатком|застосуванням|, оскільки можна використовувати багатий набір готових класів і графічних елементів.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]