【问题标题】: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() 中知道是什么小部件触发了它呢?解决此问题的一种方法是在 任何 个小部件触发插槽时更新来自 所有 小部件的数据。然而,这是非常低效的; 只更新更改的项目会更受欢迎。

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

【问题讨论】:

标签: c++ qt user-interface


【解决方案1】:

您可以使用QObject::sender() 函数来确定发出信号的对象。这个函数记录在here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2017-05-20
    相关资源
    最近更新 更多