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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(220 Punkte bei 8 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(121 Punkte bei 4 Stimmen)
Google schmeißt Jabber raus ...
(121 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: 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.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 192 Punkte (12 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen 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

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...