Seite 1 von 1

Signals an Slots über mehrere klassen hinweg...

Verfasst: 25. Oktober 2007 14:34
von bw1faeh0
Hallo Leute,

gibt es für folgendes Szenarion eine Signal-Slot-Lösung?

Code: Alles auswählen

Main
   +----fmbMonitor
    |    +--fmbSniffer
    |        +--pollThread
    |        +--sendThread            SIGNAL: sendData(QString)
   +----Workspace
          +--MenuBar
          +--StatusBar
          +--WorkspaceView[0]     SLOT:     getData(Qstring)
          +--WorkspaceView[1]     SLOT:     getData(Qstring)
          +--WorkspaceView[2]     SLOT:     getData(Qstring)
          +--WorkspaceView[3]     SLOT:     getData(Qstring)
          +--WorkspaceView[4]     SLOT:     getData(Qstring)
          +--WorkspaceView[5]     SLOT:     getData(Qstring)
          +--WorkspaceView[6]     SLOT:     getData(Qstring)
          +--WorkspaceView[7]     SLOT:     getData(Qstring)
Also im Prinzip soll der sendThread die Daten an die verschiedenen WorkspaceViews schicken. Dabei ist zu beachten, dass WorkspaceView nicht von Workspace erbt, auch wenn dies anhand der Namen nahe liegen könnte. Das da oben sind alles eizelne Objekte.

Wie kann ich es also anstellen, dass das Signal an den Slots ankommt?

Ich habe überlegt, ob ich von fmbMonitor über Workspace zu WorkspaceView einen Zeiger auf fmbMonitor 'mitschleife' damit ich von WorkspaceView auf die Objekte von fmbMonitor und somit im Endeffekt auf sendThread Signal zugreifen kann.
Was haltet ihr davon? Gibt es einen besseren Weg?

Grüße

Chrisitan

Re: Signals an Slots über mehrere klassen hinweg...

Verfasst: 25. Oktober 2007 15:07
von Christian81
bw1faeh0 hat geschrieben: Wie kann ich es also anstellen, dass das Signal an den SLots ankommt?
Ich würde es mal mit QObject::connect() probieren :D

Wo genau liegt das Problem? An der Übergabe der ptr zu den Klassen?

Verfasst: 25. Oktober 2007 15:08
von bw1faeh0
habe das post bearbeitet, um meine idee rüberzubringen, bitte nochmal lesen ;)

Verfasst: 25. Oktober 2007 19:43
von Volker
Ich kapier nicht ganz warum du von den Workspaces auf dein sendThread zugreifen willst. sendThread ist doch nach Deiner Definition das Signal, also müsste ja eher sendThread auf die Workspaces zugreifen. Aber wie auch immer, Christian hat vollkommen recht, es genügt ein connect().

Verfasst: 26. Oktober 2007 12:27
von Sephral
Hallo,

notfalls kann man auch eine Art "Signal-Switch" an einer günstig gelegenen Stelle einrichten.

Code: Alles auswählen

SIGNAL: sendData(QString message, int destination) 
Der "Signal-Switch"-Slot wertet "destination" aus und verteilt an die Views.

Ciao,
Sephral