Signals&&Slots vs. Event Handler

Alles rund um die Programmierung mit Qt
Antworten
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Signals&&Slots vs. Event Handler

Beitrag von J!M! »

Hallo!

Worin besteht der Unterschied im Zweck zwischen Signals&&Slots und Eventhandler? D.h. anders gefragt: Was kann das Konzept Signals&&Slots, was das Eventhandling nicht kann?

GreeZ J!M!
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Signals und Slots benutzt man für interne Kommunikation. Beispielsweise Daten zwischen zwei Klassen in Echtzeit austauschen. Events werden zur Komminukation mit dem System genutzt. Beispielsweise QMouseEvent oder QKeyEvent.
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Beitrag von J!M! »

ok danke. :)
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Doch noch ne Frage.

Beitrag von J!M! »

Öhm, doch noch ein paar Fragen:

1. Wenn z.B. QPushButton das Signal clicked() besitzt, dann könnte i doch auswählen ob i in diesem Falle mit Signal&&Slots oder mit MousePressEvent() arbeite oder nicht?

2. (bezüglich Event Handlern in Qt): Beispiel -> Buttons sind generell dazu da, um geklickt zu werden, d.h. das MousePressEvent ist das Standardereignis, somit ist MousePressEvent() der Standard Event Handler. Nun hat aber jeder Programmierer unterschiedliche Vorhaben, was beim Klicken des Buttons geschieht werden soll, d.h. er möchte den Inhalt des MousePressEvent() verändern. Die Frage:
Gibt es eine Möglichkeit den Inhalt des Event Handlers zu modifzieren, ohne dafür extra selber eine neue von QPushButton abgeleitete Klasse erstellen zu müssen? Denn dann müsste man ja praktisch gesehen für jeden Button den man verwendet, eine neue Klasse erstellen. Denn ein Button, der nix macht, wenn man draufklickt ist ya nutzlos.

Grüße J!M!
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

dafür sind doch die signals and slots da...
du machst

Code: Alles auswählen

connect(pushButton, SIGNAL(clicked()), this, SLOT(buttonSlot()));
buttonSlot ist in deiner Gui-Klasse unter public slots: deklariert und enthält das was passieren soll wenn das Button geklickt wird.
Aber les dir dazu mal die doku durch.
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

KernelPanic hat geschrieben:dafür sind doch die signals and slots da...
du machst

Code: Alles auswählen

connect(pushButton, SIGNAL(clicked()), this, SLOT(buttonSlot()));
buttonSlot ist in deiner Gui-Klasse unter public slots: deklariert und enthält das was passieren soll wenn das Button geklickt wird.
Aber lies dir dazu mal die doku durch.
seh ich auch so, wobei du natuerlich aus langeweile sicher auch mit MousePressEvent da rangehen koenntest ...

mfg,
julian
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Beitrag von J!M! »

ok ersma danke für die schnellen antworten.

also zu meiner 1. frage, wenn i richtig verstanden habe, heißt es: "ya, in qt kann man bei SystemEvents je nach möglichkeit auch mit Signal&&Slots arbeiten statt Events."
Wenn i es doch falsch verstanden haben sollte, bitte korrigieren. i bin nämlich qt einsteiger, und will keine missverstängnisse bei den grundkenntnissen haben.

und 2.... hmm. ok, seh mir ersma die Doku an.

Grüße J!M!
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Beitrag von J!M! »

Ah, ok. :):) GutGut.

Hab grad noch ne Seite gefunden, welche eine Vereinfachung des Connectens von Signal&&Slots beschreibt: Einfach on_ELEMENT_SIGNAL() unter "Slot" deklarieren, bspw. on_QPushButton_clicked(). Hömm... Gibt es irgendeinen Nachteil dabei? Denn ansonsten versteh i nicht, warum diese Art kaum in den Examples zu finden ist und stattdessen die ellenlange Art und Weise mit connect() verwendet wird.

Und... Die Qt-Klassen haben ja bereits, selbstverständlich, Elementfunktionen. Wenn i z.B. möchte, dass beim Klick auf ein Button ein Fenster angezeigt werden soll, kann i dann direkt das Signal QPushButton::clicked() mit QMainWindow::show() als SLOT verbinden? Denn in der Doku zu Signals&&Slots steht ya, dass Slots durchaus in gewisser Hinsicht wie normale Memberfunctions behandelt werden....
Oder muss in extra eine SLOT-Funktion anlegen, die dann ihrerseits erst QMainWindow::show() aufruft?

Grüße J!M!
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

Mach mal das Qt Tutorial...
Ist bei der Doku dabei.
J!M!
Beiträge: 7
Registriert: 27. August 2008 01:49

Beitrag von J!M! »

okidoke. :)

aber um nochmal zurückzukommn. wenn i iwann auf einen fall treffen sollte, dass in einer klasse noch kein signal für ein systemevent deklariert wurde, dann muss i ya einen event handler benutzen. und um den inhalt des eventhandlers zu modifzieren muss i dann selbst eine neue abgeleitete funktion erstellen?

MfG J!M!
Antworten