Kildekodeskelettet |
forrige | Lav nye programmer | næste |
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.
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.
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.
forrige | hjem | næste |
Byg første gang | op | Konstruktion af programvisning |