Home / LinuxUser / 2001 / 12 / Adventskalender mit C++ und Qt

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Debian leicht gemacht
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Vorfreude, schönste Freude

Adventskalender mit C++ und Qt

Türchen und andere Objekte

Nach diesen Vorbereitungen heißt es, sich um das Programm selbst zu kümmern. Moderne GUI-Programmierung orientiert sich am Paradigma der Objektorientierung. Welche Objekte brauchen wir also? Neben dem obligatorischen Anwendungsobjekt ein Hauptfenster, das wiederum aus 24 Türchen besteht. Diese unterscheiden sich nur unwesentlich, nämlich in der Aufschrift und dem dahinter versteckten Bildchen. Es wäre also albern, 24 mal nahezu identischen Code zu schreiben. Stattdessen bauen wir eine Klasse namens Tuerchen, die all das in sich vereint, was bei Türchen-Objekten identisch ist. Die Unterschiede legen wir erst fest, wenn wir ein individuelles Objekt dieser Klasse erzeugen.

Das Erzeugen geht selbstverständlich nicht aus dem Nichts, sondern mit einer speziellen Funktion, dem Konstruktor der Klasse, den es in einer Datei mit der Endung .cpp ("C plus plus") zu implementieren gilt. Der Konstruktor heißt immer genauso wie die Klasse selbst, in unserem Fall also Tuerchen(). Als Funktion kann er Argumente mit auf den Weg bekommen. Das bietet sich an, denn die einzelnen Türchen-Objekte dürfen gleich bei ihrer "Geburt" erfahren, welches Bild sie enthalten und für welchen Tag sie gedacht sind:

Tuerchen::Tuerchen( QPixmap* bildchen, const int tag )

Der String Tuerchen vor dem :: besagt, dass der Konstruktor Tuerchen() zur Klasse Tuerchen gehört. Dabei übergeben wir das Bildchen nicht etwa als Zeiger auf ein char-Feld, wie es in den xpm-Dateien definiert ist, sondern als Zeiger auf eine QPixmap, eine spezielle Qt-Klasse, die die Arbeit mit Pixmaps erleichtert.

Damit unsere Tuerchen-Objekte die Vorteile von Qt-GUI-Objekten genießen, müssen sie selbst welche sein. Das geht ganz einfach mit Vererbung: Wir definieren, dass sich Tuerchen die Eigenschaften einer Qt-Widget-Klasse "einverleibt". Da es im Qt-Werkzeugkasten keine bereits passende Klasse gibt, leiten wir Tuerchen von der allgemeinen Qt-Widget-Klasse QWidget ab:

: QWidget( elternwidget, name )

Hilfe!

Der QWidget-Konstruktor hätte gern zwei Argumente, doch woher wissen wir das? Keine Hexerei, denn zum Glück gibt es die API-Dokumentation zu Qt, die sich in HTML-Form unter /usr/doc/qt(2)/html/, /usr/share/doc/packages/qt/html/ o. ä. im besten Fall bereits auf dem eigenen Rechner findet. Wer Qt aus RPMs eingespielt hat, muss aufpassen: Viele Distributoren lagern die Dokumentation in Extra-Pakete (qt2-examples, qt2-tutorial und qt2-doc-html bei Caldera, qt-devel-doc bei SuSE) aus. Sofern man ständig online ist, kann man den Web-Browser auch auf http://doc.trolltech.com/ richten; für unsere Zwecke reicht die Qt-2.3.1-Dokumentation unter http://doc.trolltech.com/2.3/.

Dort finden wir unter dem Punkt API Reference die Alphabetical Class List, wo unter dem Buchstaben W ein Link auf die Dokumentation zu QWidget zeigt. Als erste öffentliche (public) Funktion ist der Konstruktor QWidget aufgeführt; ein Klick darauf bringt uns zur näheren Beschreibung (Abbildung 3).

Abbildung 3

Abbildung 3: Hilfe zum QWidget-Konstruktor

Dieser Konstruktor hätte gern drei Argumente, wobei alle ignorieren kann, wer mit dem Standardwert 0 zufrieden ist. Unsere Tuerchen-Objekte sollen jedoch keine Hauptfenster werden, wie die Null des parent-Arguments festlegt, sondern zu einem Adventskalender-Objekt gehören. Einen Zeiger auf dieses Elternfenster wollen wir also bei der Geburt eines Tuerchens mit übergeben. Namenlos soll das Baby auch nicht sein: Zwar werden wir die im zweiten Argument angegebene "Widget-ID" nie verwenden, doch guter Programmierstil ist ihre Festlegung schon.

Da der name eines Widgets möglichst eindeutig sein soll, legen wir ihn besser beim Erstellen eines Türchen-Objekts als Argument des Tuerchen-Konstruktors fest. Und warum sollten wir nicht die Flexibilität behalten, auch das Eltern-Widget bei der Tuerchen-Geburt festzulegen? Der komplette "Fußabdruck" (footprint) des Tuerchen-Konstruktors sieht dann so aus:

Tuerchen::Tuerchen( QWidget* elternwidget, QPixmap* bildchen,
                 const int tag, const char* name )
         : QWidget( elternwidget, name ){}

Mit den Zeigern elternwidget und name werden wir nichts weiter anstellen – da soll sich QWidget drum kümmern.

Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 200 Punkte (22 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...