1

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

在没有任何保护措施的情况下将它们相互连接会创建一个无限循环的信号:对象 A 更改并向对象 B 和 C 发出信号;B 和 C 分别向 A 和 C 和 B 发回信号;等。接收信号时暂时断开其他对象,更新对象后重新连接几乎没有工作,重点是“有点勉强”,包括由于多个信号乱序而导致的偶尔崩溃。

对于同步多个 Q​​t 对象的安全可靠的方法,您会推荐什么?

4

2 回答 2

0

您可以QObject::blockSignals按照此处所述使用。但是您必须记住,如果您使用QObject::blockSignals将阻止所有信号,直到您QObject::blockSignals使用false参数调用。

于 2013-08-26T07:49:28.397 回答
0

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

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

至少,这应该避免死循环。
当然,MVC 模式是处理此类更新的更好方法。

于 2013-08-26T09:01:16.967 回答