05.12.2012 Aufrufe

Helmut Herold: Das Qt-Buch - Der millin Verlag

Helmut Herold: Das Qt-Buch - Der millin Verlag

Helmut Herold: Das Qt-Buch - Der millin Verlag

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

2 Grundlegende Konzepte und Konstrukte von <strong>Qt</strong><br />

2.2.2 Schiebebalken und Buttons zum Ändern der<br />

Schriftgröße mit Textanzeige<br />

Hier werden wir kennenlernen, wie man eigene Slots definieren kann und was bei der<br />

Generierung des Programms zu beachten ist. <strong>Das</strong> hier vorgestellte Programm 2.3 ist eine<br />

Erweiterung zum vorherigen Programm schieb_balk.cpp, indem es die angezeigte<br />

LCD-Nummer als Schriftgröße interpretiert und das Aussehen eines Textes mit dieser<br />

Schriftgröße exemplarisch rechts anzeigt (siehe Abbildung 2.4).<br />

Abbildung 2.4: Schiebebalken und Buttons zum Ändern der Schriftgröße mit Textanzeige<br />

Für dieses Programm 2.3 soll ein eigener Slot definiert werden, der immer aufzurufen ist,<br />

wenn der Schiebebalken-Wert sich ändert. Dieser Slot ist für die Darstellung des Textes<br />

mit der neuen Schriftgröße, die dem Schiebebalken-Wert entspricht, zuständig.<br />

Für das Signal-Slot-Konzept hat <strong>Qt</strong> einige neue Schlüsselwörter eingeführt, die vom Präprozessor<br />

in die entsprechende C++-Syntax übersetzt werden. Um sich Klassen zu definieren,<br />

die eigene Slots und/oder Signale deklarieren, muss folgende <strong>Qt</strong>-Syntax eingehalten<br />

werden:<br />

Class MyClass : public QObject {<br />

Q_OBJECT<br />

....<br />

signals:<br />

//.... hier werden die entsprechenden Signale deklariert, wie z.B.:<br />

void buchstabe_a_gedrueckt();<br />

public slots:<br />

//.... hier werden die public Slots deklariert, wie z.B.:<br />

void lasse_text_blinken();<br />

private slots:<br />

//.... hier werden die privaten Slots deklariert, wie z.B.:<br />

void ich_bin_interner_slot();<br />

//.... Weitere Deklarationen sind hier möglich<br />

}<br />

Bei der Deklaration von Slots und Signalen sind die folgenden Punkte zu beachten:<br />

24<br />

1. Deklaration von Slots und Signalen ist nur in Klassen erlaubt<br />

Die Deklaration einer Funktion, die als Slotroutine dienen soll, oder eines Signals<br />

außerhalb einer Klasse ist also nicht möglich, was im Übrigen ja auch der C++-<br />

Philosophie widersprechen würde.<br />

2. Klassen mit eigenen Slots bzw. Signalen müssen von QObject abgeleitet sein.<br />

Da man wohl in den meisten Fällen beim Programmieren mit <strong>Qt</strong> ohnehin Klassen<br />

verwendet, die direkt oder indirekt von der Klasse QWidget abgeleitet sind, ist dies<br />

keine große Einschränkung, da QWidget seinerseits von QObject abgeleitet ist.<br />

3. Klassen mit eigenen Slots bzw. Signalen müssen Q_OBJECT aufrufen<br />

Hinter dem Makro Q_OBJECT darf kein Semikolon angegeben werden.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!