QT中的多个连接对象

时间:2013-08-26 04:06:30

标签: c++ qt signals

我有几个Qt对象可以相互通知任何更改。

在没有任何安全措施的情况下将它们相互连接会产生无限的信号循环:物体A改变并发出物体B和C的信号; B和C中的每一个分别将信号发送回A和C和B;在接收到信号后暂时断开其他对象并在更新对象之后重新连接几乎没有工作,重点是“几乎没有”,其中包括由于多个信号乱序而偶然发生的崩溃。

对于同步多个Qt对象的安全且可靠的方法,您会建议什么?

2 个答案:

答案 0 :(得分:0)

您可以按here所述使用QObject::blockSignals。但是你必须记住,如果你使用QObject::blockSignals,那么在你使用QObject::blockSignals参数调用false之前,所有信号都会消失。

答案 1 :(得分:0)

您应检查值是否确实在接收方和发送方都发生了变化,如下所示:

class A {
    slot:
        setValue(int a) {
            if (a != m_a) {
                m_a = a;
                emit changed();
            }
        }
    private:
        int m_a;
}

至少,这应该避免无休止的圈子 当然,MVC模式是处理这类更新的更好方法。