Signals&&Slots vs. Event Handler
Signals&&Slots vs. Event Handler
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!
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:
Doch noch ne Frage.
Ö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!
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:
dafür sind doch die signals and slots da...
du machst
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.
du machst
Code: Alles auswählen
connect(pushButton, SIGNAL(clicked()), this, SLOT(buttonSlot()));Aber les dir dazu mal die doku durch.
-
-=Freaky=-
- Beiträge: 503
- Registriert: 29. Dezember 2006 22:54
- Wohnort: HL
seh ich auch so, wobei du natuerlich aus langeweile sicher auch mit MousePressEvent da rangehen koenntest ...KernelPanic hat geschrieben:dafür sind doch die signals and slots da...
du machstbuttonSlot ist in deiner Gui-Klasse unter public slots: deklariert und enthält das was passieren soll wenn das Button geklickt wird.Code: Alles auswählen
connect(pushButton, SIGNAL(clicked()), this, SLOT(buttonSlot()));
Aber lies dir dazu mal die doku durch.
mfg,
julian
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!
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!
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!
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:
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!
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!