Другий ретро-підручник про KDE, з перекладених зимою 2001 року. Перший тут.
Оригінальний архів тут.
KHello
Це KDE версія найвідомішої програми – Hello World!. Якщо ви ніколи не писали програм для KDE, вона для вас.
- Daniel Marjamaki
- 2000-02-01
-
Переклад: Олег Фаренюк, 25 січня 2001
- KHello
- KHello 1 - Найпростіша можлива KDE програма
- KHello 2 - Створення класу вікна
- KHello 3 – Додаємо кнопки
- KHello 4 – Додаємо Меню
KHello 1 - Найпростіша можлива KDE програма
![]() |
---|
Опис
Це, наскільки я знаю – найпростіша можлива KDE-програма.
Текст
Вихідний текст програми дуже простий:
/************* khello.cc *******************/
#include <kapp.h>
#include <ktmainwindow.h>
int main( int argc, char **argv )
{
KApplication a( argc, argv, "khello" );
KTMainWindow *w = new KTMainWindow();
w->setGeometry(100,100,200,100);
a.setMainWidget( w );
w->show();
return a.exec();
}
/************* end of file *****************/
Пояснення до коду
Тут пояснено окремі команди:
#include <kapp.h>
#include <ktmainwindow.h>
Файл kapp.h
містить деякі базові елементи, необхідні всім програмам, а в файлі ktmainwindow.h
c++
``c++ оголошено клас що використовується для всіх головних вікон KDE - програми:
KApplication a(argc, argv);
KTMainWindow *w = new KTMainWindow();
Створює об’єкти KApplication
і KTMainWindow
. KApplication
буде містити весь код необхідний нашій програмі а KTMainWindow буде нашим головним вікном:
w->setGeometry(100,100,200,100);
Перемістити і змінити розмір вікна. Воно переміщається в положення з координатами (100, 100), а його розмір стає 200x100 (висота x ширина):
a.setMainWidget( w );
Програма має знати де шукати головне вікно.
w->show();
``
Робимо головне вікно видимим.
```c++
return a.exec();
Запускаємо програму.
Компіляція
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti khello.cc
g++ -L$KDEDIR/lib -lkdeui -lkdecore -lqt -ldl -o khello khello.o
KHello 2 - Створення класу вікна (window class)
![]() |
---|
Опис
На цьому кроці я поясню як створити віконний клас.
Текст
На цей раз маємо три файли:
/************* khello.h *******************/
#include <kapp.h>
#include <ktmainwindow.h>
class KHello : public KTMainWindow
{
Q_OBJECT
public: void closeEvent(QCloseEvent
*);
};
/************* khello.cc ******************/
#include "khello.moc"
void KHello::closeEvent(QCloseEvent *)
{
kapp->quit();
}
/************* main.cc ********************/
#include "khello.h"
int main( int argc, char **argv )
{
KApplication a( argc, argv, "khello" );
KHello *w =
newKHello();
w->setGeometry(100,100,200,100); a.setMainWidget( w
);w->show();
return a.exec();
}
Пояснення до коду
Тут лише декілька команд потребують пояснення.
Q_OBJECT
Це команда для мета-компілятора об’єктів (meta object compiler – MOC
), котрий входить до складу файлів розробника для QT.
void closeEvent(QCloseEvent *);
Ця функція викликається при завершенні вашої KDE програми.
#include "khello.moc"
Мета-компілятор об’єктів створює moc-файл, який ви маєте включити у свій проект. moc-файл це розширена версія вашого файлу заголовків.
Компіляція
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti main.cc
moc khello.h -o khello.moc
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti khello.cc
g++ -L$KDEDIR/lib -lkdeui -lkdecore -lqt -ldl -o khello main.o khello.o
KHello 3 – Додаємо кнопки
![]() |
---|
Опис
А зараз якраз час додати декілька кнопок.
Текст
Старий код – сірий. Я не наводжу тут main.cc
, тому що тут він такий ж, як і в KHello #2.
/************* khello.h *******************/
#include <kapp.h>
#include <ktmainwindow.h>
#include <qpushbutton.h>
class KHello : public KTMainWindow
{
Q_OBJECT
public:
KHello();
void closeEvent(QCloseEvent *);
public slots:
void slotHello();
void slotExit();
private:
QPushButton *btnHello;
QPushButton *btnExit;
};
/************* khello.cc ******************/
#include "khello.moc"
#include <kmsgbox.h>
KHello::KHello() : KTMainWindow()
{
btnHello = new QPushButton("Hello",this);
btnHello->setGeometry(45,30,50,25); btnHello->show();
connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello()));
btnExit = new QPushButton("Exit",this);
btnExit->setGeometry(105,30,50,25); btnExit->show();
connect(btnExit, SIGNAL(clicked()), this, SLOT(slotExit()));
}
void KHello::closeEvent(QCloseEvent*)
{
kapp->quit();
}
void KHello::slotHello()
{
KMsgBox::message(0,"Important","Hello World!");
}
void KHello::slotExit()
{
close();
}
Пояснення до коду
Я поясню лише те, що на мою думку, потрібно на даний час.
public slots:
Ця секція є новою, і вона використовується мета-компілятором об’єктів. У світі QT слоти(slots) є обробниками подій (event-handlers) a сигнали (signals) є подіями (events).Розміщуйте всі ваші обробники подій в цій секції.
connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello()));
Приєднує подію “cliked
” від об’єкту btnHello
до обробника “slotHello
”.
Компіляція
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti main.cc
moc khello.h -o khello.moc
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti khello.cc
g++ -L$KDEDIR/lib -lkdeui -lkdecore -lqt -ldl -o khello main.o khello.o
KHello 4 – Додаємо Меню
![]() |
---|
Опис
Тепер ощасливимо наших користувачів, додавши меню!
Текст
/************* khello.h *******************/
#include <kapp.h>
#include <ktmainwindow.h>
#include <qpushbutton.h>
#include <kmenubar.h>
#include <qpopupmenu.h>
class KHello : public KTMainWindow
{
Q_OBJECT
public:
KHello();
void closeEvent(QCloseEvent *);
public slots:
void slotHello();
void slotExit();
private:
QPushButton *btnHello;
QPushButton *btnExit;
KMenuBar *menu;
QPopupMenu *file, *help;
};
/************* khello.cc ******************/
#include "khello.moc"
#include <kmsgbox.h>
KHello::KHello() : KTMainWindow()
{
btnHello = new
QPushButton("Hello",this);
btnHello->setGeometry(45,30,50,25);btnHello->show();
connect(btnHello, SIGNAL(clicked()), this, SLOT(slotHello()));
btnExit = new
QPushButton("Exit",this);
btnExit->setGeometry(105,30,50,25);btnExit->show();
connect(btnExit, SIGNAL(clicked()), this, SLOT(slotExit()));
file =
newQPopupMenu(); file->insertItem("&Hello", this,
SLOT(slotHello()));file->insertItem("&Exit", this, SLOT(slotExit()));
help = kapp->getHelpMenu(TRUE, "KHello\nby Daniel Marjamдki");
menu =
newKMenuBar(this); menu->insertItem("&File",
file);menu->insertItem("&Help", help);
}
void KHello::closeEvent(QCloseEvent*)
{kapp->quit();
}
void KHello::slotHello()
{
KMsgBox::message(0,"Important","Hello World!");
}
void KHello::slotExit()
{
close();
}
Важливий код
Цей код простий і не потребує додаткових пояснень. Однак, я думаю один рядок важливий і я зупинюся на його функціях.
help = kapp->getHelpMenu(TRUE, "KHello\nby Daniel Marjamaki");
KApplication
містить вбудовану функцію яка генерує меню допомоги. Використовуйте її щоб ваші програми були схожими на інші KDE програми.
Компіляція
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti main.cc
moc khello.h -o khello.moc
g++ -c -I$KDEDIR/include -I$QTDIR -fno-rtti khello.cc
g++ -L$KDEDIR/lib -lkdeui -lkdecore -lqt -ldl -o khello main.o khello.o