我有几个 Qt 对象可以相互通知任何更改。
在没有任何保护措施的情况下将它们相互连接会创建一个无限循环的信号:对象 A 更改并向对象 B 和 C 发出信号;B 和 C 分别向 A 和 C 和 B 发回信号;等。接收信号时暂时断开其他对象,更新对象后重新连接几乎没有工作,重点是“有点勉强”,包括由于多个信号乱序而导致的偶尔崩溃。
对于同步多个 Qt 对象的安全可靠的方法,您会推荐什么?
您可以QObject::blockSignals
按照此处所述使用。但是您必须记住,如果您使用QObject::blockSignals
将阻止所有信号,直到您QObject::blockSignals
使用false
参数调用。
您应该检查值是否确实发生了变化,无论是在接收方还是在发送方,如下所示:
class A {
slot:
setValue(int a) {
if (a != m_a) {
m_a = a;
emit changed();
}
}
private:
int m_a;
}
至少,这应该避免死循环。
当然,MVC 模式是处理此类更新的更好方法。