Kildekodeskelettet

For at gøre det klart hvordan et KDE-program virker, skal vi først undersøge kildekodeskelettet, som allerede varetages af programguiden, meget nøjagtigt. Som vi allerede har set, har vi et sæt kildekode- og deklarationsfiler som opbygger den oprindelige programkode og gør den klar til at køre. Derfor er den nemmeste måde at forklare koden at følge implementeringen linje for linje som den behandles under kørsel af programmet til det går ind i hovedbegivenhedsløkken og er klart til at acceptere brugerindput. Derefter kigger vi på funktionerne som muliggør kommunikation med brugeren, og hvordan visse ting fungerer. Dette er formodentlig den bedste måde at forklare rammeomgivelserne, og eftersom det er ens for næsten alle KDE-programmer, gør det at du kan læse kildekode også fra andre projekter. Desuden lærer du dig hvor forskellige dele af koden skal ændres for at få dit program til at opføre sig som det er beregnet til at gøre.

Funktionen main()

Eftersom programmet begynder at køre ved at gå ind i funktionen main(), er det der vi begynder at kigge på koden. Funktionen main() i KScribble er implementeret i filen main.cpp, og kan også findes ved at bruge klassesøgeren og vælge mappen "Globale funktioner".

1  int main(int argc, char **argv)
2  {
3      KAboutData about("kscribble", I18N_NOOP("KScribble"), version, description,
4                       KAboutData::License_GPL, "(C) 2002 Dit Navn", 0, 0, "du@du.se");
5      about.addAuthor( "Dit Navn", 0, "du@du.se" );
6      KCmdLineArgs::init(argc, argv, &about);
7      KCmdLineArgs::addCmdLineOptions(options);
8      KApplication app;
9  
10    // registrer os som en DCOP-klient
11    app.dcopClient()->registerAs(app.name(), false);
12 
13    // se om vi starter med sessionshåndtering
14    if (app.isRestored())
15        RESTORE(KScribble)
16    else
17    {
18        // ingen session.. start kun som almindeligt
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 }

Det der først sker nu, er at objektet KApplication laves som almindeligt, men vi har tilføjet nogle KDE-metoder som angiver information om programmet og forfatteren af programmet.

Start af brugerprogrammet

... (endnu ikke skrevet)

Konstruktoren

Lad os kigge lidt på konstruktoren og se hvordan instansen kaldes

1  KScribble::KScribble()
2      : KMainWindow( 0, "KScribble" ),
3        m_view(new KScribbleView(this)),
4        m_printer(0)
5  {
6      // accepter træk og slip
7      setAcceptDrops(true);
8  
9      // fortæl KMainWindow at det virkelig er hovedkontrollen
10     setCentralWidget(m_view);
11 
12     // indstil derefter vore handlinger
13     setupActions();
14 
15     // og en statuslinje
16     statusBar()->show();
17 
18     // tillad visningen at ændre statuslinjen og overskriften
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  }

Bemærk at KScribble arver klassen KMainWindow, en ofte brugt basisklasse for KDE-programmer. Vi initierer en klasse som hedder KScribbleView som central grafikkomponent, laver en KStatusBar via metoden statusBar() (på linje 16), og forbinder nogle signaler og slots.