Signal Slots

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
mauro100
Beiträge: 13
Registriert: 19. November 2013 13:09

Signal Slots

Beitrag von mauro100 »

Ich habe eine kleine Frage bezüglich Signals und Slots und zwar wie kann ich ein connect zwischen Objekten verschiedener Klassen erstellen ?
Ich habe mein MainWindow.ui und eine weiteres ui. in dem ich einen Button habe der das MainWindow schließen soll.
Komme da irgendwie nicht weiter bin auch totaler QT Anfänger.

Ich hoffe mir kann jemand weiterhelfen
Vielen Dank schonmal.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Signal Slots

Beitrag von Christian81 »

Die Funktion QObject::connect() erwartet einen Pointer auf den Sender und einen auf den Empfänger. Wo ist also genau das Qt-Problem hier?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
mauro100
Beiträge: 13
Registriert: 19. November 2013 13:09

Re: Signal Slots

Beitrag von mauro100 »

Normalerweise wenn ich ein connect zwischen 2 Objekten in einer Klasse habe mache ich ja connect(Objekt1, SIGNAL(), Objekt2, SLOT()) bisher konnte ich immer auf die Objekte mit z.B. ui->QPushButton zugreifen
Aber wie mache ich das ganze bei 2 Objekten die in verschiedenen ui. sind?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Signal Slots

Beitrag von Christian81 »

Wie man Pointer von einer Klasse an eine andere übergibt sind C++ Grundlagen - sry aber beschäftige Dich bitte erstmal intensiv mit C++ ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: Signal Slots

Beitrag von Hulk2442 »

Du brauchst eine Klasse welche Alle Klassen welche du miteinander per SIGNAL/SLOT verbinden willst inkludieren kann.
Am häufigsten eignet sich hierfür deine MainWindow Klasse da Sie im Normalfall alle notwendigen UI's erzeugt bzw. ein und ausblendet.
In dieser greifst du dann auf den Inhalt deiner inkludierten "UI" Klassen und baust die Verbindung auf.

Pseudo Code

Code: Alles auswählen

#include "MainWindow.hh"

#include "ui_1.hh"
#include "ui_2.hh"

MainWindow::connectUI()
{
	connect( ui_1->pushButton, SIGNAL(clicked()), ui_2->lineEdit, SLOT(clear()) );
}
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Signal Slots

Beitrag von RHBaum »

Designtechnisch ist das aber alles suboptimal ....

Normal gibt man Clicks von Buttons nicht aus der Klasse raus, die das ui implementiert.
Sondern man abstrahiert das.

Der button hat ja irgendwie ne logik, sowas wie User adden oder User loeschen .... etc
Also verpasst man der Klasse die das ui implementiert nen Signal ala onUserAdd;
in der klasse selber mappt man das triggered vom ui->button auf das onUserAdd ...

Die Empfangende Klasse bekommt dann nen slot ala doUserAdd ...

Wer den SIgnal Slot der beiden klassen connected, bestimmt dannn die klassenhirarchie
Ist einer der beiden klassen OWNER der anderen, machts die ....
sind beide auf gleiche stufe in der hirarchie, machts der parent von beiden ....

gehts ueber mehrere Hirarchien ... ists zu ueberlegen ob man die Signale / Slots durch die ganze hirarchie schleift ....

Nur fuers connecten Memberpointer zu uebergeben / merken find ich ned so toll .... weil das ne stärkere kopplung ist ....
der Vorteil der Signal/Slot geschichte ist ja die lose Kopplung (keine Abhaengigkeit) der Dinge

Ciao ...
Antworten