Verständnisfrage zu Events
Verständnisfrage zu Events
In Qt gibt es Signal/Slots und Funktionen wie send/postEvent. Warum gibt es zwei Wege Events zu verbreiten? Wann benutze ich welchen?
Grob gesagt...
Signals/Slots verwendet man wenn mann beispielsweise von einer Klasse zu einer anderen was schicken/empfangen möchte.
Events schickt und empfängt man unter anderem Applikationsweit. Das heißt ein Widget schickt ein Event weg, alle anderen können auf das Event reagieren.
Bitte korrigiert mich falls ich auch was falsch verstanden habe.
LG NoRulez
Signals/Slots verwendet man wenn mann beispielsweise von einer Klasse zu einer anderen was schicken/empfangen möchte.
Events schickt und empfängt man unter anderem Applikationsweit. Das heißt ein Widget schickt ein Event weg, alle anderen können auf das Event reagieren.
Bitte korrigiert mich falls ich auch was falsch verstanden habe.
LG NoRulez
@upsala
Events koennen aber auch synchron / asynchron verarbeitet werden, siehe postEvent und notify !
@Tyrdal
Signale und Slots nutzen teilweisse die Mechanismen von events, teilweisse umgehen sie sie, wo es ned gebraucht wird (Synchrone Aufrufe).
Prinzipiell koenntest du alles selber manuell auch ueber Events machen.
Dann brauchst du aber auch fuer synchrone Aufrufe immer eine Eventloop, was ziemlich unpraktisch waer
Vostellen muesstest du dir auch, das es tausende von userdefinierten Signal / SLot verwendungen mit unterschiedlichen Kontext geben. Dafuer muesste es dann ein genersiches QEvent geben, was alle paramater genereisch haendeln kann (schwer zu bedienen) ... oder es muesste tausende von verschiedenen QEvent Variationen geben.
Der Signal / SLot Mechanismus implementiert dir genau diese generizitaet und du brauchst dich um die datenuebertragung ned zu kuemmern.
Siehs einfach als Vereinfachung ... als einheitliche Schnittstelle fuer synchrone und Assynchrone funktionaufrufe.
Bedeutet fuer dich: Nimm Signale / Slots wenn du kannst, Events wenn du musst
Ciao ...
Events koennen aber auch synchron / asynchron verarbeitet werden, siehe postEvent und notify !
@Tyrdal
Signale und Slots nutzen teilweisse die Mechanismen von events, teilweisse umgehen sie sie, wo es ned gebraucht wird (Synchrone Aufrufe).
Prinzipiell koenntest du alles selber manuell auch ueber Events machen.
Dann brauchst du aber auch fuer synchrone Aufrufe immer eine Eventloop, was ziemlich unpraktisch waer
Vostellen muesstest du dir auch, das es tausende von userdefinierten Signal / SLot verwendungen mit unterschiedlichen Kontext geben. Dafuer muesste es dann ein genersiches QEvent geben, was alle paramater genereisch haendeln kann (schwer zu bedienen) ... oder es muesste tausende von verschiedenen QEvent Variationen geben.
Der Signal / SLot Mechanismus implementiert dir genau diese generizitaet und du brauchst dich um die datenuebertragung ned zu kuemmern.
Siehs einfach als Vereinfachung ... als einheitliche Schnittstelle fuer synchrone und Assynchrone funktionaufrufe.
Bedeutet fuer dich: Nimm Signale / Slots wenn du kannst, Events wenn du musst
Ciao ...