【问题标题】:QSlider Value Changed SignalQSlider 值改变信号
【发布时间】:2010-11-10 15:36:57
【问题描述】:

我正在使用 QSlider (v4.6) 进行输入以及向用户提供反馈。对于反馈,我将调用 setValue 方法。我试图找到一个只有在用户修改值时才会触发的信号。 valueChanged 信号在用户更改值以及我调用 setValue 时触发。 sliderMoved 仅在用户拖动滑块时触发(而不是在使用键盘时)。我检查了 API 文档,似乎找不到任何东西。我错过了什么吗?这似乎很常见。如果没有其他信号,您建议我如何模拟此功能?我是否应该在调用 setValue 之前设置一个标志,每次调用 setValue 时断开并重新连接信号...?

【问题讨论】:

标签: c++ qt4 qslider


【解决方案1】:

好问题,我检查了 API,也找不到只有在用户修改值时才会触发的信号。您提出的解决方法可能是唯一的选择,请记住您不必断开/连接所有信号,只需使用QObject::blockSignals 方法:

slider->blockSignals(true);
slider->setValue(x);
slider->blockSignals(false);

希望对您有所帮助。

【讨论】:

  • 谢谢帕维尔!我不知道blockSignals。我想这将不得不这样做。
  • 您可能希望存储blockSignals(true) 返回的值并在第二次调用中使用它而不是false。这样,如果其他一些代码已经启用了信号阻塞,你就不会弄乱状态。 (我希望这个问题不太可能发生,但无论如何防御性编码是个好主意。)
  • 这个方法可以在 PySide(python 绑定)中应用,我确实应用了。结果与预期一致,除了 Qt Designer 中定义的信号。如果您在 Qt Designer 中将滑块连接到进度条并说“当滑块的值更改时,设置进度条的值”,然后在更新其值之前阻止滑块的信号,则滑块的值会更新,但进度条的值不会更新。这就是为什么断开和连接信号更合适的原因。
猜你喜欢
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-25
  • 2020-07-18
  • 2013-09-30
相关资源
最近更新 更多