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=-
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..
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.