

Чтобы понять принцип работы KDE-программы, давайте сначала поближе рассмотрим исходный код, предоставленный Мастером приложений. Разберём код (почти) построчно, в том порядке, в котором он выполняется, до момента, когда программа войдёт в главный цикл событий и будет ожидать действий от пользователя. Т.к. большинство программ KDE имеют похожую структуру, это поможет вам легче ориентироваться в коде других программ (благо, се они распространяются с открытым исходным кодом).
Выполнение программы начинается с функции main(). Она прописана в файле main.cpp, её можно найти через "Обзор классов", в ветке "Глобальные функции".
1 int main(int argc, char **argv)
2 {
3 KAboutData about("kscribble", I18N_NOOP("KScribble"), version, description,
4 KAboutData::License_GPL, "(C) 2002 Your Name", 0, 0, "you@you.com");
5 about.addAuthor( "Your Name", 0, "you@you.com" );
6 KCmdLineArgs::init(argc, argv, &about);
7 KCmdLineArgs::addCmdLineOptions(options);
8 KApplication app;
9
10 // register ourselves as a dcop client
11 app.dcopClient()->registerAs(app.name(), false);
12
13 // see if we are starting with session management
14 if (app.isSessionRestored())
15 RESTORE(KScribble)
16 else
17 {
18 // no session.. just start up normally
19 KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
20 if (args->count() == 0)
21 {
22 KScribble *widget = new KScribble;
23 widget->show();
24 }
25 else
26 {
27 int i = 0;
28 for (; i < args->count(); i++)
29 {
30 KScribble *widget = new KScribble;
31 widget->show();
32 widget->load(args->url(i));
33 }
34 }
35 args->clear();
36 }
37
38 return app.exec();
39 }
В ней создаётся объект KApplication, но перед этим добавляются некоторые методы KDE, указывающие информацию о программе и авторе.
Давайте посмотрим на использование конструктора
1 KScribble::KScribble()
2 : KMainWindow( 0, "KScribble" ),
3 m_view(new KScribbleView(this)),
4 m_printer(0)
5 {
6 // accept dnd
7 setAcceptDrops(true);
8
9 // tell the KMainWindow that this is indeed the main widget
10 setCentralWidget(m_view);
11
12 // then, setup our actions
13 setupActions();
14
15 // and a status bar
16 statusBar()->show();
17
18 // allow the view to change the statusbar and caption
19 connect(m_view, SIGNAL(signalChangeStatusbar(const QString&)),
20 this, SLOT(changeStatusbar(const QString&)));
21 connect(m_view, SIGNAL(signalChangeCaption(const QString&)),
22 this, SLOT(changeCaption(const QString&)));
23
24 }
KScribble наследует класс KMainWindow - базовый класс KDE-программ. Класс KScribbleView инициализируется как центральный элемент управления, KStatusBar создаётся методом statusBar() (строка 16), затем некоторые сигналы соединяются со слотами.