PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Genauer Vorgang bei...



Miles
06-06-2003, 07:43
... dem Aufruf einer Funktion wie mousePressEvent().

Mir ist die Verwendung dieser Art von Funktionen schon klar. Es geht mir hier viel mehr ums Detail.

Als Erstes:
In Qt gibt es ja Signal- und Slot-Funktionen. Aber diese Funktion ist keines von beiden. Oder?

Zweitens:
Wenn diese Funktion aufgerufen wird, wird dann immer direkt nur diese Funktion aufgerufen, direkt von so einer Art Nachrichtenschleife, auch bei Child-Objekten, oder wird zunächst von einer Nachrichtenschleife an das Parent-Fenster etwas geschickt, das dann wiederrum die Childfunktion aufruft?
(Diese Frage gilt sowohl für mousePressEvent(), alsauch für Signals.)

Hoffe ihr könnt mir helfen,
Miles

anda_skoa
06-06-2003, 09:13
Original geschrieben von Miles
Als Erstes:
In Qt gibt es ja Signal- und Slot-Funktionen. Aber diese Funktion ist keines von beiden. Oder?


Nein, eine ganz normale, virtual deklarierte, Methode.



Zweitens:
Wenn diese Funktion aufgerufen wird, wird dann immer direkt nur diese Funktion aufgerufen, direkt von so einer Art Nachrichtenschleife, auch bei Child-Objekten, oder wird zunächst von einer Nachrichtenschleife an das Parent-Fenster etwas geschickt, das dann wiederrum die Childfunktion aufruft?


Es geht direkt an das Widget, auf dem das Event passiert ist.
Vermutlich wird es weiter nach oben propagiert, wenn es nicht konsumiert wurde.



(Diese Frage gilt sowohl für mousePressEvent(), alsauch für Signals.)


Signals sind ganz was anderes.
Die sind direkt mit einer Methode oder einem anderen Signal verbunden, das Empfänger QObject steht eindeutig fest.

Ciao,
_

Miles
08-06-2003, 08:43
Signals sind ganz was anderes.
Die sind direkt mit einer Methode oder einem anderen Signal verbunden, das Empfänger QObject steht eindeutig fest.


Schon klar. Aber ich hab das eher in die andere Richtung gemeint. Woher weiß ein Signal, dass es jetzt etwas machen muss? Ich könnte mir denken, dass es ähnlich wie Mouse- oder Keyboard-Methoden von meinem Programm (Nachrichten-Schleife) aus aufgerufen wird, oder?

anda_skoa
08-06-2003, 11:03
Original geschrieben von Miles
Schon klar. Aber ich hab das eher in die andere Richtung gemeint. Woher weiß ein Signal, dass es jetzt etwas machen muss? Ich könnte mir denken, dass es ähnlich wie Mouse- oder Keyboard-Methoden von meinem Programm (Nachrichten-Schleife) aus aufgerufen wird, oder?

Signals sind synchron! Wie ein Callback.
Das Auslösen des Signals ist ein Befehl im Code.

Wenn in einer Klasse ein "emit" steht, kehrt dieser Befehl erst zurück, wenn alle damit verbundenen Slots ausgefürht wurden.
Die Reihenfolge der Slots ist dabei nicht festgelegt.

Ciao,
_