Seite 1 von 1

[Anfängerfrage]Mehrere Signals, ein Slot

Verfasst: 26. Juni 2009 19:43
von candux
Hallo,

ich arbeite mich gerade etwas in QT ein. Als IDE benutze ich QT Creator

In meinem Programm habe ich neun Buttons die alle den selben Slot auslösen sollen. In diesem Slot soll unterschieden werden können, welcher Button gedrückt wurde.

Wie löse ich dieses Problem am besten? Ich habe bereits versucht, bei den neun Connects der Signals mit dem Slot, dem Slot einen Parameter mitzugeben, dies geht aber anscheinend nicht.

Schon einmal vielen Dank für die Hilfe!

Gruß
David Weber

Verfasst: 26. Juni 2009 19:49
von -=Freaky=-
im slot kannst du die funktion sender() benutzen.
http://doc.qtsoftware.com/4.5/qobject.html#sender

mfg,
julian

Verfasst: 26. Juni 2009 20:12
von solarix

Verfasst: 26. Juni 2009 21:36
von candux
Vielen Dank für eure Antworten!

Ich habe versucht den QSignalMapper einzubauen, allerdings bekomme ich ich bei dem hinzufügen einer Connection immer sofort einen Speicherzugriffsfehler.

Hier ist der Backtrace:

Code: Alles auswählen

#0  0x00007f00068d5791 in QObject::connect () from /usr/lib/libQtCore.so.4
#1  0x00000000004041b8 in Wins_Gui::insertButtons (this=0x7fff1b3044f0) at wins_gui.cpp:37
#2  0x0000000000403de8 in Wins_Gui (this=0x7fff1b3044f0, parent=0x0) at wins_gui.cpp:12
#3  0x0000000000403b8b in main (argc=1, argv=0x7fff1b304648) at main.cpp:7
System ist ein aktuelles Archlinux System:
QT: 4.5.2
gcc: 4.4.0

Wisst ihr wo der Fehler liegt oder ist das ein Bug in den aktuellen Paketen?
Anbei sind meine Projektdateien.

Verfasst: 26. Juni 2009 22:04
von -=Freaky=-
solarix hat geschrieben:oder besser: QSignalMapper: http://doc.trolltech.com/4.5/qsignalmapper.html
warum sollte man den verwenden, das versteh ich nicht so ganz.
damit koennte man zusaetzlich parameter mitgeben, aber die waeren ja nur noetig, wenn es QObject::sender() nicht gaebe.

mfg,
julian

Verfasst: 26. Juni 2009 22:26
von solarix
warum sollte man den verwenden, das versteh ich nicht so ganz.
das ist kein sauberes OOP..
allerdings bekomme ich ich bei dem hinzufügen einer Connection immer sofort einen Speicherzugriffsfehler.
Kein wunder... du erstellst die Instanz NACHDEM du sie connectest.. :wink:

Code: Alles auswählen

 this->insertButtons(); // connect buttonGroup....
 buttonGroup = new QSignalMapper(this);

Verfasst: 26. Juni 2009 22:44
von -=Freaky=-
solarix hat geschrieben:
warum sollte man den verwenden, das versteh ich nicht so ganz.
das ist kein sauberes OOP...
nagut, da magst du wohl recht haben.
find ich aber nicht allzu schlimm zu nutzen, und die trolls werdens aus gruenden eingebaut haben.
wie auch immer ...

mfg,
julian

Verfasst: 26. Juni 2009 23:00
von upsala
Weil es sauberer ist.
Weil es von Qt empfehlen wird.
Weil es einfacher ist.