您认为设计信号/插槽交互以更新类中的成员值的最佳做法是什么?
例如,考虑在UI上表示的成员变量.用户更改UI中的值.存在信号/槽关系以通过成员变量更新功能自动更新成员变量.
我们还希望在UI上自动更新成员变量的更改,因此另一种方式存在信号/插槽关系.在通过更新功能更新成员变量时,信号触发UI更新.
你如何防止这些成为循环?它是否像调用成员变量更新函数时检查新值与当前值一样简单,如果存在差异,仅发送信号以更新UI?
或者......有更优雅的方式吗?
你如何防止这些成为循环?它是否像调用成员变量更新函数时检查新值与当前值一样简单,如果存在差异,仅发送信号以更新UI?
是.
从语用上讲,这允许你连接一个QDial,一个QSpinBox和一个QSlider并使它们保持同步,而不需要你做额外的魔法来防止无限循环.
从语义上讲,您是否注意到值更改时的典型信号称为值更改?
void myClass::setValue(int value) {
if (m_value != value) {
m_value = value;
emit valueChanged(value); // YES, THE VALUE *DID* CHANGE!
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着如果没有值发生变化,则不应发出信号,如果您尝试将值设置为当前值,则会发生这种情况 - 通过直接设置或通过信号/插槽调用.