如何确定哪个小部件触发了插槽功能?

时间:2014-03-25 22:30:48

标签: c++ qt user-interface

我有一个包含10个对象的数组,每个对象都有8个参数,全部用GUI表示。我宁愿没有定义80个插槽;我更喜欢让1个插槽处理所有GUI触发的更改:

// 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()));
    ...
}

当调用UpdateTerm()时,我需要根据触发它的窗口小部件中的更改来更新相应的数据。但是我怎么能在UpdateTerm()中告诉它触发了什么小部件呢?解决此问题的一种方法是在任何触发广告位时更新来自所有小部件的数据。然而,这是非常低效的;更新更改项目将是首选。

因此问题:是否可以从插槽功能中确定哪些小部件触发了它?这样做最干净的方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以使用QObject::sender()功能确定发出信号的对象。此功能记录在here