Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to determine which widget triggered the slot function?

I have an array of 10 objects, each having 8 parameters, all represented in GUI. I'd rather not have 80 slots defined; I'd much prefer to have 1 slot handling all the GUI triggered changes:

// Connect 10 Term objects
for( int n = 0; n < m_MaxTerms; ++n )
{
    // Connect several checkboxes for the nth Term item
    connect(m_Term[n].m_CD.GetData(), SIGNAL(clicked(bool)), this, SLOT(UpdateTerm()));
    // Connect several edit fields for the nth Term item
    connect(m_Term[n].m_Volume.GetData(), SIGNAL(editingFinished()), this, SLOT(UpdateTerm()));
    ...
}

When UpdateTerm() is called I need to update the corresponding data based on the changes in the widget that triggered it. But how could I tell, from within UpdateTerm(), what widget triggered it? One way to solve the problem is to update data from all widgets when the slot is triggered by any of them. However, this is very inefficient; updating only the changed item would be much preferred.

Thus the question: is it possible from the slot function to determine which of the widgets triggered it? What would be the cleanest method of doing so?

like image 762
Michael Avatar asked Dec 03 '25 05:12

Michael


1 Answers

You can use the QObject::sender() function to determine which object emitted the signal. This function is documented here.

like image 177
deGoot Avatar answered Dec 05 '25 20:12

deGoot