Von Qt zu KDE
Das im letzten Kapitel entwickelte Hello world-Programm soll
nun zu einer waschechten KDE-Anwendung gemacht werden.
hellokde.cpp
1 #include <kapp.h>
2 #include <qlabel.h>
3 #include <qpushbutton.h>
4
5 int main(int argc, char* argv[])
6 {
7 KApplication myApp(argc, argv);
8
9 QWidget* myWidget = new QWidget();
10 myWidget->setGeometry(400, 300, 120, 90);
11
12 QLabel* myLabel = new QLabel("Hello world", myWidget);
13 myLabel->resize(80, 30);
14
15 QPushButton* myQuitButton = new QPushButton("Quit", myWidget);
16 myQuitButton->setGeometry(10, 50, 100, 30);
17 QObject::connect(myQuitButton, SIGNAL(clicked()), &myApp, SLOT(quit()));
18
19 myApp.setMainWidget(myWidget);
20 myWidget->show();
21
22 return myApp.exec();
23 }
Im Vergleich zur letzten Programmversion hat sich nicht allzuviel
geändert. Der einzige Unterschied besteht darin, dass anstatt
der Klasse QApplication diesmal KApplication
verwendet wird. Deshalb muss auch statt der Headerdatei
qapplication.h die Datei kapp.h eingebunden
werden. Beim Übersetzen kommen jetzt noch drei neue Parameter
hinzu die dafür sorgen, dass die KDE-Bibliotheken gefunden werden.
$> g++ -I$QTDIR/include -I$KDEDIR/include -L$QTDIR/lib
-L$KDEDIR/lib -lqt -lkdecore -o hellokde hellokde.cpp
Führt man das Programm jetzt aus, scheint es auch optisch keine grossen
Unterschiede zur reinen Qt-Version zu geben.
Aber das liegt eigentlich nur daran, dass der Standardfont auf dem
System dem Standard-Qt-Font sehr ähnlich sieht. Wählt man im
KDE Kontrollzentrum mal eine andere Schriftart so sieht man, dass
man durch den Austausch eines Buchstaben eine ganz neue
Funktionalität hinzugewonnen hat. Das 'Look & Feel' dieser
Anwendung lässt sich nun mit dem KDE-Kontrollzentrum konfigurieren.
Ein etwas umfangreicheres Beispiel
Um die Möglichkeiten, die sich dem Entwickler mit KDE bieten,
ein wenig anzudeuten, folgt hier jetzt ein etwas aufwendigeres
Beispiel.
hellokde.cpp
1 #include <kapp.h>
2 #include <kmenubar.h>
3 #include <ktmainwindow.h>
4 #include <qlabel.h>
5 #include <qkeycode.h>
6
7 int main (int argc, char **argv)
8 {
9 const char *aboutText = "Hello KDE\nvon Thorsten Ehlers";
10
11 KApplication myApp(argc, argv);
12 KTMainWindow* mainWidget = new KTMainWindow;
13
14 QPopupMenu *filePopup = new QPopupMenu ();
15 filePopup->insertItem(i18n("&Quit"), &myApp, SLOT (quit()), CTRL + Key_Q);
16
17 KMenuBar *menuBar = mainWidget->menuBar();
18 menuBar->insertItem(i18n("&File"), filePopup);
19 menuBar->insertSeparator();
20 menuBar->insertItem(i18n("&Help"), myApp.getHelpMenu(TRUE, aboutText));
21
22 QLabel* myLabel = new QLabel(i18n("Hello world"), mainWidget);
23 myLabel->setAlignment(AlignCenter);
24 myLabel->setFont(QFont("charter", 64, QFont::Bold, TRUE));
25 myLabel->setMinimumSize(myLabel->sizeHint());
26 mainWidget->setView(myLabel);
27
28 myApp.setMainWidget(mainWidget);
29 mainWidget->show();
30
31 return myApp.exec();
32 }
Zu den Neuerungen dieser Version gehört unter anderem auch eine
Menüzeile. In den Zeilen 14 und 15 wird zuerst einmal ein
Popup-Menü erzeugt, das erscheinen soll, wenn im Hauptmenü
auf File geklickt wird. Dieses Popup-Menü enthält
nur einen einzigen Eintrag: Quit. Dieser Eintrag wird mit
dem Slot quit() der KApplication
verbunden. Desweiteren wird noch ein globaler Shortcut STRG+Q
definiert, dessen Eingabe genau wie die Auswahl des Menüpunktes
eine Beendigung des Programmes zur Folge hat.
Das Hauptmenü wird in den Zeilen 17 bis 20 erzeugt. Es
enthält zwei Einträge: unter File findet sich das
bereits beschriebene Dateimenü und unter Help verbirgt
sich das Standardhilfemenü des KDE. Dieses bietet dem Anwender
die Möglichkeit, unter Contents das Programm KDE
Help mit der Anleitung der Applikation zu starten, sowie mit
About hellokde... bzw. About KDE... einen
Informationsdialog zur Applikation oder KDE zu öffnen.
Ein weiteres Novum ist das Makro i18n (eine abkürzende
Schreibweise für
KApplication::getKApplication()->getLocale->translate(char* )), das alle im Programm
vorkommenden Texte umklammert. Dadurch wird es möglich, dass
der geklammerte Text später in der jeweils eingestellten
Landessprache ausgegeben wird.
Da diesmal auch KDE-Klassen mit einer graphischen
Repräsentation verwendet werden, muss beim Binden auch die
Bibliothek libkdeui verwendet werden.
$> g++ -I$QTDIR/include -I$KDEDIR/include -L$QTDIR/lib -L$KDEDIR/lib -lqt -lkdecore -lkdeui -o hellokde hellokde.cpp