fon*_*ini 6 c++ qt signals-slots qt4.8
我有QSlider和QSpinBox,我希望它们的值始终相等,所以我将滑块的valueChanged(int)信号连接到旋转盒的setValue(int)插槽,反之亦然:(当然,我还将最小值和最大值设置为相等) )
connect(delay_slider, SIGNAL(valueChanged(int)),
delay_spin, SLOT(setValue(int)));
connect(delay_spin, SIGNAL(valueChanged(int)),
delay_slider, SLOT(setValue(int)));
Run Code Online (Sandbox Code Playgroud)
我测试了,它的工作原理(至少在我的Ubuntu 12.04 LTS x86_64,g ++ 4.6.3,Qt 4.8.1上).
现在,我认为当我发出其中一个信号时,它会触发另一个信号,这将触发第一个,这将触发另一个,等等.Qt如何处理?是否有描述所用机制的文件?
Obs:我称之为"事件循环发出",因为这与Qt事件循环无关
这正是Signals&Slots文档中的示例:
Run Code Online (Sandbox Code Playgroud)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请注意,该
setValue()函数仅设置值并发出信号value != m_value.这可以防止在循环连接的情况下无限循环(例如,如果b.valueChanged()连接到a.setValue()).
所以在这种情况下它是一个安全功能setValue.这也记录在setValue函数中:
setValue()valueChanged()如果新值与旧值不同,则会发出.
如果更改滑块中的值,它将发出,这将更改旋转中的值,该值将发出,现在不会更改滑块中的值.
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |