From 10:00 CET Friday 22nd November we will adjust how the server works to deal with some recently reported problems. Therefore there may be a load problem, if you experience more problems than usual trying to access the forum then please PM AndyS or any of the moderators so they can inform me.


How to get the correct sender from a custom widget



  • Hello guys! This is my first post, hopefully i won't make too many mistakes.
    Soo i have a problem using the QTableWidget and a custom widget. I created a custom widget containing a QPushButton and QComboBox. To goal is get the currentIndex from the combobox of the row, where the button was pressed. I forgot to mention that the combobox and the button are in the same row. Here is the code:

    //for loop to fill all rows:
                PushButton *sendButton = new QPushButton();
                sendButton->setText("Send");
    
                QComboBox *myComboBox= new QComboBox();
                myComboBox->addItem("Test");
    
                QHBoxLayout *customLayout = new QHBoxLayout();
                customLayout->addWidget(myComboBox);
                customLayout->addWidget(sendButton);
    
                QWidget *customWidget = new QWidget();
                customWidget->setLayout(customLayout);
    
                ui->tableWidget->setCellWidget(row, 5, customWidget);
                commandComboBox->setProperty("row", row);
                sendButton->setProperty("row", row);
    
                connect(sendButton, SIGNAL(clicked()), this, SLOT(sendButtonClicked()));
    
    void Test::sendButtonClicked()
    {
        int row;
    
        QPushButton *myButton = qobject_cast<QPushButton *>(sender());
        row = myButton->property("row").toInt();//THIS seems to work
    
        QComboBox *myCombo = qobject_cast<QComboBox *>(sender());
        int index= myCombo->currentIndex();//<--------HERE is the problem
    
    }
    
    

    Can anyone tell me how i can get the current index from the "sender" comboBox?

    Thank you!


  • Lifetime Qt Champion

    Hi and welcome :)

    It seems you only hook up the button and its clicked() ?

    so,
    QComboBox *myCombo = qobject_cast<QComboBox *>(sender());
    int index= myCombo->currentIndex();//<--------HERE is the problem

    should crash as myCombo is NULL since its not a QComboBox but a QPushButton..
    (so the cast fails)

    If you hook up the combobox signal
    currentIndexChanged(int index)
    to a slot u can get it directly when user click in it.



  • @mrjj Thank you!
    Sooo i kind of did what you said and used the currentIndexChanged signal. I made a Qbytearray where i store the currentindex and replace the index when an index changed. Then i can use this array to get the currentIndex from the row where the button was pressed. I know that there is probably a better solution but it works^^
    I will mark this post as answered i guess.