Rupert Wenzel
mail@ruwela.de
Erstes Programm
Dazu starten wir KDevelop, waehlen in der Menueleiste den Eintrag Projekt -> Neu und kommen
so zu dem Anwendungsassistenten .
1
Der KDevelop Anwendungsassistent
Hier waehlen wir “KDE 2 Mini” und klicken auf “Weiter”, um in das Eingabe-Fenster fuer Projekt-
name, Version und Autor zu gelangen.
Nachdem alle Eingaben getaetigt wurden koennen wir auf den Button “Erstellen” klicken und es
erscheint ein Fenster, in dem eine zeitlang Meldungen durchlaufen. Nach einiger Zeit sollte in der
2
letzten Zeile “READY” stehen und in dem Textfeld darunter sollten keine Fehlermeldungen stehen.
Wenn wir nun den “Beenden”- Knopf druecken, beendet sich der Assistent und wir befinden uns in
der Entwicklungsumgebung.
3
2 Die Entwicklungsumgebung
Das linke Fenster der Entwicklungsumgebung zeigt baumartig die Arbeitsansichten (Dateien, Klas-
sen, Gruppen oder die Dokumentation), in dem grossen rechten Fenster wird der Quellcode oder
die Online-Hilfe angezeigt und in dem unteren Fenster werden Meldungen des Compilers und des
fertigen Programms (stdout und stderr) angezeigt. Ausserdem ist in dem unteren Fenster auch eine
Konsole enthalten.
Die Entwicklungsumgebung
In der 2. Werkzeugleiste sind zwei Auswahlboxen mit deren Hilfe man zu den Klassen und Funk-
tionen des Projektes springen kann. Momentan sind nur die Klasse “MeinErstesProgramm” in der
linken Auswahl, sowie ihr Konstruktor und Destruktor zu sehen.
In der Arbeits-Ansicht auf der linken Seite sind die drei fuer uns wichtigen Quellcodedateien main.c
meinerstesprogramm.h und meinerstesprogramm.cpp nach Gruppen geordnet zu sehen. Wenn wir
4
nun auf den Start-Icon in der oberen Button-Leiste druecken wird aus den Quell-Code Dateien
ein ausfuehrbares Programm erstellt und gestartet. Dabei koennen wir in dem unteren Fenster Mel-
dungen des Compilers und Linkers verfolgen. Fehlermeldungen werden rot angezeigt, Warnungen
blau. Die letzte Meldung sollte “*** Erfolg *** *** Fehlercode: 0 ***” sein.
Nach erfolgreicher Kompilierung startet das Programm, welches im jetzigen Zustand nur aus einem
leeren Fenster besteht, da wir ja noch keine Zeile Code geschrieben haben.
MeinErstesProgramm
5
3 Der vom Anwendungsassistenten erstellte Quellcode
3.1 main.cpp
Der folgende Code stammt aus der Datei main.c, so wie ihn der Assistent von KDevelop erstellt
hat, uns so wie wir die Datei belassen wollen.
Am Beginn sehen wir den Kommentar, dessen Inhalt (Name, E-Mail Adresse) wir im Assistenten
angegeben haben. Mit include wird der Praeprozessor angewiesen, drei Standard Headerdateien
und die Datei meinerstesprogramm.h in den Quellcode einzufuegen. Als naechstes kommen eine
Beschreibung und die Kommandozeilenparameter, welche wir aber nicht benoetigen. In Zeile 35
beginnt die Einstiegsfunktion main() mit den Kommandozeilenparametern (int argc enthaelt die
Anzahl der Parameter, char *argv[] enthaelt die Parameter selbst). Mit der Zeile
KApplication a;
wird die Anwendung erstellt, in Zeile
MeinErstesProgramm *meinerstesprogramm = new MeinErstesProgramm();
wird ein neues Objekt MeinErstesProgramm erstellt, das Fenster, das wir mit
meinerstesprogramm->show(); sichtbar machen muessen.
/***************************************************************************
main.cpp - description
-------------------
begin : Son Dez 9 22:46:17 CET 2001
copyright : (C) 2001 by Rupert Wenzel
email : ruwela@web.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <kcmdlineargs.h>
#include <kaboutdata.h>
#include <klocale.h>
#include "meinerstesprogramm.h"
6
{
KApplication a;
MeinErstesProgramm *meinerstesprogramm = new MeinErstesProgramm();
a.setMainWidget(meinerstesprogramm);
meinerstesprogramm->show();
return a.exec();
}
3.2 meinerstesprogramm.h
Die folgende Datei meinerstesprogramm.h wurde auch vom KDevelop-Wizzard erzeugt und ist die
Headerdatei zu der Klasse MeinErstesProgramm welche von QWidget abeleitet wird. Das Makro
Q_OBJECT ermoeglicht das Signal/Slot-Konzept von QT. Anschliessend erfolgt die Definition von
Konstruktor und Destruktor.
/***************************************************************************
meinerstesprogramm.h - description
-------------------
begin : Son Dez 9 22:46:17 CET 2001
copyright : (C) 2001 by Rupert Wenzel
email : ruwela@web.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef MEINERSTESPROGRAMM_H
#define MEINERSTESPROGRAMM_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <kapp.h>
#include <qwidget.h>
7
Q_OBJECT
public:
/** construtor */
MeinErstesProgramm(QWidget* parent=0, const char *name=0);
/** destructor */
~MeinErstesProgramm();
};
#endif
3.3 meinerstesprogramm.cpp
Die von KDevelop erzeugte Datei meinerstesprogramm.cpp beinhaltet den noch leeren Konstruktor
bzw. Destruktor. Im Konstruktor werden spaeter die Widgets erstellt.
/***************************************************************************
meinerstesprogramm.cpp - description
-------------------
begin : Son Dez 9 22:46:17 CET 2001
copyright : (C) 2001 by Rupert Wenzel
email : ruwela@web.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "meinerstesprogramm.h"
MeinErstesProgramm::~MeinErstesProgramm()
{
}
8
4 Unser Quell-Code
4.1 Haupt Fenster
Als erstes wollen wir die Groesse und Position des Fensters festlegen. Dazu fuegen wir zwischen
die geschweiften Klammern des Konstruktor in der Datei meinerstesprogramm.cpp folgende Zeilen
ein. Da wir mit setMinimumSize und setMaximumSize die gleichen Werte zugewiesen haben, laesst
sich die Fenstergroesse nicht veraendern. (Der Quellcode des fertigen Programms findet sich am
Ende des Dokuments).
// Fenstergroesse einschraenken (Breite , Hoehe)
setMinimumSize( 160, 200 );
setMaximumSize( 160, 200 );
Um dem Fenster eine eigene Ueberschrift zu geben, fuegen wir die folgende Zeile ein:
// Fenstertitel festlegen
setCaption("Programm");
Da wir auf Funktionen eins Objekts der aktuellen Klasse zugreifen, brauchen wir keinen Objektna-
men, wir koennten aber statt dessen den this Zeiger verwenden.
this->setCaption("Programm");
4.2 Buttons
Nun wollen wir die Buttons erstellen. Dazu fuegen wir in die Datei meinerstesprogramm.h die
Header-Datei qpushbutton.h mit folgender Zeile ein:
#include <qpushbutton.h>
Wir muessen nun fuer jeden Button einen Zeiger der Klasse QPushButton definieren. Da wir auf die
Buttons nur aus unserer Klasse MeinErstesProgramm zugreifen, koennen wir sie mit dem Schlues-
selwort private definieren:
private:
QPushButton *EndeKnopf; // Zeiger fuer Ende-Knopf erstellen
QPushButton *MachWasKnopf; // Zeiger fuer MachWas-Knopf erstellen
QPushButton *MessageKnopf; // Zeiger fuer Message-Knopf erstellen
In der Datei meinerstesprogramm.cpp werden nun die drei Objekte erstellt. Das erste Wort der Zeile
z.B. “MachWasKnopf” ist der Name des neuen Objekts, mit dem Schluesselwort new wird Spei-
cher fuer ein Objekt QPushButton bereitgestellt. Der String “Mach Was” ist der Text auf dem neuem
Button, das & Zeichen unterstreicht M und definiert es somit als Shortcut. Mit dem this Zeiger wird
festgelegt, dass sich der Button auf dem Objekt der Klasse MeinErstesProgramm (unser Fenster)
9
befinden soll.
// 3 Buttons erzeugen
EndeKnopf = new QPushButton( "&Ende",this);
MachWasKnopf = new QPushButton( "&Mach Was", this);
MessageKnopf = new QPushButton( "Message&Box", this);
Wenn wir nun das Programm mit dem Start-Icon in der Button-Leiste starten, werden wir nur
einen Button sehen, da sich alle drei Objekte in der gleichen Ecke links oben befinden. Diese gilt
es nun zu plazieren:
// Widgets plazieren
// Name->setGeometry( linker Abstand , oberer Abstand , Breite , Hoehe )
MachWasKnopf->setGeometry(20,40,120,30);
EndeKnopf->setGeometry(20,80,120,30);
MessageKnopf->setGeometry(20,120,120,30);
Fuer unser Textfeld hier die Definition eines Zeigers vom Typ QLineEdit, die im Gegensatz zu den
Buttons public erfolgen muss, damit wir auf das Objekt zugreifen koennen:
public:
QLineEdit *TextFeld; // Zeiger fuer Textfeld
Fuer die beiden anderen Buttons MachWasKnopf und MessageKnopf muessen wir zwei Slots in
unsere Klasse MeinErstesProgramm einfuegen. Dazu muessen wir in der Headerdatei meinerstes-
10
programm.h die Slots mit public definieren:
public slots:
void MySlotMachWas(); // Slot fuer MachWas Knopf erstellen
void MySlotMessage(); // Slot fuer Message Knopf erstellen
In der Datei meinerstesprogramm.cpp erstellen wir die Slots, die in etwa normalen Funktionen ent-
sprechen. Dazu muessen wir in die Datei ganz unten (nach dem Destruktor) folgenden Code fuer
den Slot MySlotMachWas einfuegen:
void MeinErstesProgramm::MySlotMachWas()
{
// Schreibe in das Textfeld "Hallo Welt"
TextFeld->setText("Hallo Welt");
Der Code des Slots MySlotMessage ist etwas laenger, da hier mehrere MessageBoxen verwendet
werden:
void MeinErstesProgramm::MySlotMessage()
{
{
case 0: // Knopf 0 wurde gedrueckt
// Eine neue MessageBox mit dem Ergebnis
QMessageBox::information(this, "Das ist die Ueberschrift",
"Button 0 wurde gedrueckt.
Das war der Default-Button",0);
break;
break;
11
"Button 2 wurde gedrueckt",0);
break;
}
Nun konnen wir mit connect die beiden anderen Buttons mit den in unserer Klasse MeinErstesPro-
gramm erstellten Slots verbinden:
connect( MessageKnopf, SIGNAL(clicked()), this , SLOT(MySlotMessage()));
connect( MachWasKnopf, SIGNAL(clicked()), this , SLOT(MySlotMachWas()));
Nach einem abschliessenden Startversuch sollten eigentlich alle Buttons eine Funktion haben.
4.5 Menueleiste
Auch das Einfuegen einer Menueleiste geht einfach, wir brauchen dazu folgende Headerdateien in
der Datei meinerstesprogramm.h:
#include <kmenubar.h>
#include <qpopupmenu.h>
Durch Einfuegen der folgenden Zeilen in die Datei meinerstesprogramm.cpp wir die Menueleiste
erstellt.
Als erstes wird ein Popup-Menue erstellt, mit Werten gefuellt und diese mit Slots verbunden. Vor
dem Ende Eintrag wird eine Querlienie mit insertSeperator eingefuegt.
Anschliessend wird eine KMenueBar erstellt und in diese das zuvor erstellte QPopupMenue file
eingefuegt.
Wie wir an dem Menue sehen koennen, ist es auch moeglich, Objekte in einer Zeile zu definieren
und zu erstellen.
12
// Popup Menues erstellen und mit Slots verbinden
QPopupMenu *file = new QPopupMenu(); // Popup-Menue erstellen
file->insertItem("&Mach Was ...",this,SLOT(MySlotMachWas()));
file->insertItem("Message &Box ...",this,SLOT(MySlotMessage()));
file->insertSeparator(); // Querstrich im Menue einfuegen
file->insertItem("&Ende ...",qApp,SLOT(quit()));
13
5 Anhang
5.1 Quellcode
Es folgen der Quellcode von MeinErstesProgramm. Die Datei main.cpp wurde so belassen, wie sie
vom Anwendungsassistenten erstellt wurde.
5.1.1 main.cpp
/***************************************************************************
main.cpp - description
-------------------
begin : Son Dez 9 22:46:17 CET 2001
copyright : (C) 2001 by Rupert Wenzel
email : ruwela@web.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include <kcmdlineargs.h>
#include <kaboutdata.h>
#include <klocale.h>
#include "meinerstesprogramm.h"
14
int main(int argc, char *argv[])
{
KApplication a;
MeinErstesProgramm *meinerstesprogramm = new MeinErstesProgramm();
a.setMainWidget(meinerstesprogramm);
meinerstesprogramm->show();
return a.exec();
}
15
5.1.2 meinerstesprogramm.h
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <kapp.h>
#include <qwidget.h> // Fuer QWidget
#include <qpushbutton.h> // Fuer QPushButton - Knoepfe
#include <qlineedit.h> // Fuer QLineEdit - Textfeld
#include<iostream> // Fuer cout Standardausgabe an der Konsole
#include <qmessagebox.h> // Fuer QMessageBox
#include <kmenubar.h>// Fuer KMenuBar - Menueleiste
#include <qpopupmenu.h>// Fuer QPopupMenu Menues in der Menueleiste
private:
QPushButton *EndeKnopf; // Zeiger fuer Ende Knopf erstellen
QPushButton *MachWasKnopf; // Zeiger fuer MachWas Knopf erstellen
QPushButton *MessageKnopf; // Zeiger fuer Message Knopf erstellen
public:
QLineEdit *TextFeld; // Zeiger auf das Textfeld erstellen Muss public sein da sonst nicht
// von aussen ( MySlotMachWas() ) auf ihn zugegriffen werden kann
public slots:
void MySlotMachWas(); // Slot fuer MachWas Knopf erstellen
void MySlotMessage(); // Slot fuer Message Knopf erstellen
public:
/** construtor */
MeinErstesProgramm(QWidget* parent=0, const char *name=0);
/** destructor */
~MeinErstesProgramm();
};
#endif
16
5.1.3 meinerstesprogramm.cpp
/***************************************************************************
meinerstesprogramm.cpp - description
-------------------
begin : Son Dez 9 22:46:17 CET 2001
copyright : (C) 2001 by Rupert Wenzel
email : ruwela@web.de
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "meinerstesprogramm.h"
// 3 Buttons erzeugen
EndeKnopf = new QPushButton( "&Ende",this);
MachWasKnopf = new QPushButton( "&Mach Was", this);
MessageKnopf = new QPushButton( "Message&Box", this);
// Widgets platzieren
17
// Name->setGeometry( linker Abstand , oberer Abstand , Breite , Hoehe )
MachWasKnopf->setGeometry(20,40,120,30);
EndeKnopf->setGeometry(20,80,120,30);
MessageKnopf->setGeometry(20,120,120,30);
// 1 Textfeld erzeugen
TextFeld = new QLineEdit ( this );
TextFeld->setGeometry(20,160,120,30);
MeinErstesProgramm::~MeinErstesProgramm()
{
}
void MeinErstesProgramm::MySlotMachWas()
{
// Schreibe in das Textfeld "Hallo Welt"
TextFeld->setText("Hallo Welt");
void MeinErstesProgramm::MySlotMessage()
{
18
// MessageBox mit Critical Icon, 3 Knoepfen "Button 0 \n
// OK", "Button 1\n Escape", "Button 2" Knopf 0 ist Default Knopf 1 ist Escape
{
case 0: // Knopf 0 wurde gedrueckt
// Eine neue MessageBox mit dem Ergebnis
QMessageBox::information(this, "Das ist die Ueberschrift",
"Button 0 wurde gedrueckt.
Das war der Default-Button",0);
break;
break;
break;
}
}
19