Helmut Herold: Das Qt-Buch - Der millin Verlag
Helmut Herold: Das Qt-Buch - Der millin Verlag
Helmut Herold: Das Qt-Buch - Der millin Verlag
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.