Qt: sender eines signals ermitteln -erledigt-



  • Hallo,
    mein problem ist: ich möchte in der slot funktion wissen, von wem das signal kam. Ich möchte einen slot einbauen, der von einer bestimmten anzahl an PushButtons aufgerufen ewrden kann. Darin möchte ich den text der Buttons auslesen. ist das möglich, oder muss ich für jeden button einen einzelnen slot anlegen?

    QObject::sender wäre schon das richtige, aber wie kann ich dann die methode des QPushButton aufrufen?



  • Hi,

    es würde mich interessieren wie Du das denn nun gelöst hast.

    Ich hatte hier ein ähnliches Problem mit 2 Arrays mit je 8 Combos denen ich je einen gemeinsamen Slot zugeordnet habe. Habe hierzu ein Klasse myCombox geschrieben, die zusätzlich zum Index noch eine ComboBox-ID führt und diese via Signal nach außen verfügbar macht.

    Bin mir aber nicht im Klaren darüber, ob das nicht noch (viel) eleganter geht ...

    cu, Bernd

    class myComboBox : public QComboBox
    {
    	Q_OBJECT
    
    private:
    	int intId;	// die ID der ComboBox, 1 ... 8
    	int intIndex;	// cboXXX[intId]->currentIndex()
    
    public:
    	myComboBox(int id, QWidget *parent = 0);
    
    public slots:
    	void setMyCurrentIndex(int index);
    
    signals:
    	void myCurrentIndexChanged(int id, int index);
    };
    
    myComboBox::myComboBox(int id, QWidget *parent) : intId(id), intIndex(-1), QComboBox(parent)
    {
    	connect( this, SIGNAL(currentIndexChanged(int)), this, SLOT(setMyCurrentIndex(int)) );
    }
    
    void myComboBox::setMyCurrentIndex(int index)
    {
    	emit myCurrentIndexChanged(intId, index);
    }
    

    sowie später dann irgend sowas:

    myComboBox * cboChannel[xyz];
    
    for (int i = 0; i < xyz; i++ )
    {
       cboChannel[i] = new myComboBox(i, parentxyz);
       connect( cboChannel[i], SIGNAL(myCurrentIndexChanged(int,int)), this, SLOT(ChannelIndexChanged(int,int)) );
    }
    


  • Moin,

    schaut mal unter QSignalMapper nach.



  • Hallo,

    das habe ich.

    The QSignalMapper class bundles signals from identifiable senders.

    This class collects a set of parameterless signals, and re-emits them with integer, string or widget parameters corresponding to the object that sent the signal.

    Leider hat das von mir benötigte Signal aber einen Parameter:

    CurrentIndexChanged(int)

    Und nun ?

    cu, Bernd



  • Du kannst den Parameter einfach untern Tisch fallen lassen, macht dem Slot bzw. SignalMapper gar nichts.



  • Sorry, hab dein Problem falsch verstanden.

    Was du machen könntest: In deinem aufzurufenden Slot ChannelIndexChanged() über QObject::sender() die Id der sendenden ComboBox rausfinden.



  • Danke. Ich probiere das mal aus.

    cu, Bernd



  • in den meisten fällen wird man dann wohl noch casten müssen, denn meistens will man ja einen sender von einer bestimmten klasse, um damit was uu machen. (also ich habs gebraucht^^)


Anmelden zum Antworten