gpt4 book ai didi

c++ - Qt 如何处理所谓的事件无限循环?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:18 26 4
gpt4 key购买 nike

我有一个 QSlider和一个 QSpinBox ,我希望它们的值始终相等,所以我连接了 slider 的 valueChanged(int)。信号到旋转框'setValue(int) slot,反之亦然:(当然我也设置了min和max相等)

connect(delay_slider, SIGNAL(valueChanged(int)),
delay_spin, SLOT(setValue(int)));
connect(delay_spin, SIGNAL(valueChanged(int)),
delay_slider, SLOT(setValue(int)));

我测试过,它有效(至少在我的 Ubuntu 12.04 LTS x86_64、g++ 4.6.3、Qt 4.8.1 上)。

现在,我认为当我发出其中一个信号时,它会触发另一个信号,后者会触发第一个信号,后者会触发另一个信号,等等。Qt 是如何处理的?是否有描述所用机制的文档?

Obs:我称它为“事件循环发出”,因为这与 Qt Event Loop 无关。

最佳答案

这正是 Signals & Slots documentation 中的示例:

 Counter a, b;
QObject::connect(&a, SIGNAL(valueChanged(int)),
&b, SLOT(setValue(int)));

a.setValue(12); // a.value() == 12, b.value() == 12
b.setValue(48); // a.value() == 12, b.value() == 48

Note that the setValue() function sets the value and emits the signal only if value != m_value. This prevents infinite looping in the case of cyclic connections (e.g., if b.valueChanged() were connected to a.setValue()).

所以在这种情况下,它是 setValue 的安全功能。 setValue 函数中也记录了这一点:

setValue() will emit valueChanged() if the new value is different from the old one.

如果您更改 slider 中的值,它将发射,这将改变您旋转中的值,旋转将发射,现在不会改变 slider 中的值。

关于c++ - Qt 如何处理所谓的事件无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com