如何确定哪个小部件触发了插槽功能?
Posted
技术标签:
【中文标题】如何确定哪个小部件触发了插槽功能?【英文标题】:How to determine which widget triggered the slot function? 【发布时间】:2014-03-25 22:30:48 【问题描述】:我有一个由 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() 中知道是什么小部件触发了它呢?解决此问题的一种方法是在 任何 个小部件触发插槽时更新来自 所有 小部件的数据。然而,这是非常低效的; 只更新更改的项目会更受欢迎。
因此问题是:是否可以从槽函数中确定是哪个小部件触发了它?这样做最干净的方法是什么?
【问题讨论】:
Get index of QPushButton on 2D array QPushButton的可能重复 【参考方案1】:您可以使用QObject::sender()
函数来确定发出信号的对象。这个函数记录在here。
【讨论】:
以上是关于如何确定哪个小部件触发了插槽功能?的主要内容,如果未能解决你的问题,请参考以下文章