QT更新值信号/插槽的最佳实践

时间:2013-08-15 09:04:26

标签: qt signals slot

您认为设计信号/插槽交互以更新班级成员值的最佳做法是什么?

例如,考虑在UI上表示的成员变量。 用户更改UI中的值。 存在信号/槽关系以通过成员变量更新函数自动更新成员变量。

我们还希望在UI上自动更新成员变量的更改,因此另一种方式存在信号/插槽关系。在通过更新功能更新成员变量时,信号会触发UI更新。

你如何防止这些成为循环? 它是否像调用成员变量更新函数时检查新值与当前值一样简单,如果存在差异,仅发送信号以更新UI?

或者......有更优雅的方式吗?

1 个答案:

答案 0 :(得分:6)

  

你如何防止这些成为循环?它是否像调用成员变量更新函数时检查新值与当前值一样简单,如果存在差异,仅发送信号以更新UI?

从实用的角度来说,这可以让你连接一个QDial,一个QSpinBox和一个QSlider,让它们保持同步,而不需要你做额外的魔法来防止无限循环。

从语义上讲,您是否注意到值更改时的典型信号称为 已更改

void myClass::setValue(int value) {
    if (m_value != value) {
        m_value = value;
        emit valueChanged(value); // YES, THE VALUE *DID* CHANGE!
    }
}

这意味着如果值没有变化则不应发出信号,如果您尝试将值设置为当前值,则会发生这种情况 - 通过直接设置,或通过信号/插槽调用。