- •1. Введення
- •2. Прості засоби|кошти| shell
- •2.1. Структура команд
- •2.2. Угрупування команд.
- •2.3. Перенаправлення команд
- •2.4. Генерація імен файлів.
- •2.5. Командні файли.
- •3. Середовище|середа| shell (змінні і параметри)
- •3.2. Екранування
- •3.3. Маніпуляції з|із| shell-змінними
- •3.4. Експорт змінних
- •3.5. Параметри
- •3.6. Підстановки shell-інтерпретатора
- •3.7. Програмне середовище
- •4. Програмні структури
- •4.1. Команда test ("[ ]")
- •4.2. Умовний оператор "if"
- •4.3. Оператор виклику ("case")
- •4.4. Оператор циклу з|із| переліком|перерахуванням| ("for")
- •4.5. Оператор циклу з|із| передумовою ("while")
- •4.6. Оператор циклу з|із| постумовою ("until")
- •4.7. Порожній оператор
- •4.8. Функції в shell
- •4.9. Обробка переривань ("trap")
- •5. Розробка графічного інтерфейсу за допомогою бібліотеки Qt3. Створення в kDevelop базової структури додатку
- •5.1. Словник
- •5.2. Створення|створіння| проекту
- •5.3. Робота з Qt Designer
- •5.4. Розробка інтерфейсу програми
- •5.5. Додавання|добавка| виджетов|
- •5.6. Створення|створіння| проміжків між виджетами|
- •5.7. Сигнали і слоти
- •5.8. Написання коду
- •6. Литература
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 перекладаються різними мовами.
Контрольні питання і завдання:
Що таке виджет, макет, слоті сигнал?
Яке основне призначення додатків KDevelop і Qt Designer?
Як створити графічний інтерфейс заданого вигляду додатку за допомогою Qt Designer?
Яке призначення розпірок при створенні макету форми?
Як створити з’єднання сигналів і слотів?
Як виконати реалізцію коду слотів за допомогою KDevelop
Завдання:
Розробити додаток|застосування| з|із| графічним інтерфейсом, що реалізовує наступне завдання|задавання|:
Одержати|отримати| наступну|слідуючу| системну інформацію:
ім'я операційної системи, номер версії і модифікації ядра;
ім’я командного інтерпретатора;
ім’я поточного каталога.
Використовуючи Системний монітор KDE:
проаналізувати завантаження|загрузку| системи за одну хвилину;
проаналізувати завантаження|загрузку| процесора за одну хвилину
визначити тактову частоту процесора.
Розробити програму, що ілюструє методику використання розподілюваної пам’яті.
Для створення|створіння| додатку|застосування| можна вибрати візуальне середовище|середу| розробки додатків|застосувань| для ОС Linux KDevelop (компіляція, компоновка|компонування|), а для проектування графічного інтерфейсу користувача можна використовувати Qt Designer. Це полегшить роботу над додатком|застосуванням|, оскільки можна використовувати багатий набір готових класів і графічних елементів.