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

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。

【讨论】:

以上是关于如何确定哪个小部件触发了插槽功能?的主要内容,如果未能解决你的问题,请参考以下文章

Android小部件:如何确定单击了哪个按钮?

如何使用信号/槽机制获取发送者小部件?

将插槽连接到来自类派生的所有对象的信号

如何知道是啥触发了我的 Flutter 小部件重建

Qt Jambi (Qt4Dotnet):区分插槽中的信号发射器

FLTK 绘图功能使用哪个原点?小部件还是窗口?