Seite 1 von 1

Der Trick mit dem QSlider und noch eine Frage

Verfasst: 19. März 2009 00:21
von forgoden
Hallo, ich bin grad dabei die Tutorials durchzuarbeiten. Bin beim Kapitel 7, so dass mir Fragen auftauchen:

in t7/lcdrange.h steht oben

Code: Alles auswählen

class QSlider;
In der englischen Dokumentation steht da etwas von "trick". Ich kenne diesen Trick nicht und verstehe auch nicht wie das funktioniert. Der Sinn steht im Dokument was von Beschleunigung bei der Komprimierung. Allerdings kann das nicht der alleinige Grund, weil wenn ich das auskommentiere, gibt der Compiler einen Fehler aus. Was wurde da verbunden?



Meine zweite Frage:

In der Klasse sehe ich public, public slots, signals, private

ich kenne in der Klasse nur die Schlüsselwörter public und private. Aber wie funktionieren die zusätzlichen Schlüsselwörter? Ich kenne das in den C++ Regeln nicht. Ich habe erst nur die Grundlagen von C++ durchgearbeitet.

Verfasst: 19. März 2009 06:31
von Christian81
1. Suche nach 'Vorwärtsdeklaration' (C++ Basics)
2. Qt Grundlagen -> http://doc.trolltech.com/4.4/signalsandslots.html

Verfasst: 19. März 2009 22:20
von forgoden
ich meine, wie macht qt diese zusätzlichen schlüsselwörter?

schließlich ist qt nur eine klassenbibliothek?

wie könnte ich selber solche definieren? habe aus dem c++ buch daraus noch nichts gelernt

Verfasst: 19. März 2009 22:30
von forgoden
achso also mit Vorwärtsdeklaration schreibt man dann

class QSlider;

statt #include <QSlider> oder? ist es das gemeint, damit es mit derkompilierung schneller geht?

Verfasst: 20. März 2009 00:59
von CLRS530
forgoden hat geschrieben:ich meine, wie macht qt diese zusätzlichen schlüsselwörter?

schließlich ist qt nur eine klassenbibliothek?

wie könnte ich selber solche definieren? habe aus dem c++ buch daraus noch nichts gelernt
Preprocession ist das Schlüsselwort.
QMake erstellt letztlich dann Standart C++ Klassen ;)

Verfasst: 20. März 2009 10:01
von RHBaum
Preprocession ist das Schlüsselwort.
Was hat nen Forward mit dem Preprozessor zu tun ?
Forward declarations sind doch nen Sprachmerkmal ... oder ?
statt #include <QSlider> oder? ist es das gemeint, damit es mit derkompilierung schneller geht?
ja fast ^^

Nen forward bietet dir eigentlich nur die möglichkeiten, einen Typen anzulegen, ohne irgend eine Information ueber dentypen mitgeben zu muessen. Es ist dann sowas wie ne Vor - deklaration, ne reservierung des Namens.
DU kannst mit c++ diese vor-declarierten typen aber auch an allen Stellen verwenden an stellen, wo du keine Info ueber den typ selber brauchst. z.b. Zeiger, referenzen (werden eh durch nen pointer dargestellt) und rueckgabewerte im header. Sobald aber auf die Typinformationen zugreifst, brauchst dann den die richtige declaration, klar.

Verwenden tut man dies, um Abhaengigkeiten aufzuloesen !
Das ist wichtiger und maechtiger als wie es aufn ersten blick aussieht.

Das das kompilieren schneller geht, iss eher nen positiver nebeneffekt. Wichtiger dabei ist, das man das Henne / Ei problem bei gegenseitigen referenzieren von Typen/Klassen damit loesen kann.
In der englischen Dokumentation steht da etwas von "trick".
Eigentlich ist das echt schlimm wenn das da so steht !
Der Trick sollte eigentlich die Normalitaet sein !!!
zu deutsch: Man sollte nie einen Header in einen anderen header includen, wenn man nicht eine Instanzierung, oder einen methodenaufruf oder eine typinformation braucht !

Ciao ...

Verfasst: 20. März 2009 10:43
von solarix
Was hat nen Forward mit dem Preprozessor zu tun ?
nichts.. aber die Qt-Keywords "signals" und "slots"...
Das das kompilieren schneller geht, iss eher nen positiver nebeneffekt. Wichtiger dabei ist, das man das Henne / Ei problem bei gegenseitigen referenzieren von Typen/Klassen damit loesen kann.
Das ist zwar Offtopic, aber ich kanns trotzden nicht so stehen lassen... Wichtiger ist, dass sich grosse Projekte sehr viel(!) schneller uebersetzen lassen. Mit Forward-Declarations koennen sich zwar zyklische Abhaengigkeiten loesen lassen, aber das ist schlechtes Design und wird (Signals/Slots sei Dank) in Qt eigentlich auch nie gebraucht.

Verfasst: 20. März 2009 12:27
von RHBaum
Wichtiger ist, dass sich grosse Projekte sehr viel(!) schneller uebersetzen lassen.
Seh ich auch positiv, aber fuer mich ist wichtiger, das ich Zeiger durch Plugins/Module (von externen entwickelt z.b.) durchreichen kann, ohne Implementationsdetails preiszugeben ....

Ciao ...