Verständnisfrage zu Events

Alles rund um die Programmierung mit Qt
Antworten
Tyrdal
Beiträge: 28
Registriert: 12. Juni 2009 12:45

Verständnisfrage zu Events

Beitrag von Tyrdal »

In Qt gibt es Signal/Slots und Funktionen wie send/postEvent. Warum gibt es zwei Wege Events zu verbreiten? Wann benutze ich welchen?
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag von RavenIV »

Kurz und knapp:
Events: Qt-Applikation ohne GUI, also QCoreApplication
Signals: Qt-Applikation mit GUI, also QApplication

Der Rest ist sehr gut im Qt-Assistant oder in der online-Hilfe beschrieben.
Linux, das längste Text-Adventure aller Zeiten
Tyrdal
Beiträge: 28
Registriert: 12. Juni 2009 12:45

Beitrag von Tyrdal »

Das versteh ich noch nicht so ganz. Signal/Slot geht doch auch nicht-Gui Applikationen. Genau darum seh ich ja den Unterschied nicht.
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Signale werden direkt versendet (ist eigentlich nichts anders als ein direkter Funktionsaufruf) => synchron

Events werden immer über eine Event-Routine abgearbeitet => asynchron

Ausnahme: Signal/Slot-Verbindungen über Threads hinweg, aber das gibt es erst seit Qt4...
Kratzy974
Beiträge: 23
Registriert: 29. September 2009 13:25

Beitrag von Kratzy974 »

Signal / Slots können sowohl über Threads als auch innerhalb eines Threads beides sein. (Qt::QueuedConnection = Asynchron, Qt::DirectConnection = Synchron)
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

@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 ...
Tyrdal
Beiträge: 28
Registriert: 12. Juni 2009 12:45

Beitrag von Tyrdal »

Das hat jetzt geholfen, danke.
Antworten