2012-02-23 122 views
1

我在QSpinbox和QSlider之间建立关系。
QSpinbox的范围是-10.0到10.0,而QSlider的范围是-100到100.
所以,QSlider除以10的值连接到QSpinbox,反之亦然。
我互相使用“valueChanged()”信号。
我想在QSpinbox中输入“3.5”,在这种情况下,当我输入“3”时,QSpinbox的“valueChanged”改变QSlider的值,并且QSlider再次执行。所以,QSpinbox失去了焦点。
我无法一次输入“3.5”。
“valueChanged()”信号过于勤奋:)
我该如何解决这个问题?PyQt4:QSpinbox和QSlider之间的同步

回答

3

valueChanged()信号的确意味着当它被改变时激活。如果要在编辑完成时触发信号,则会有一个专门用于名为editingFinished的信号:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qabstractspinbox.html#editingFinished

您可能忽略了它,因为它是超类QAbstractSpinBox的成员。请注意,一旦小部件失去焦点或用户进入,此信号将触发。如果这不是你想要的行为,那么唯一剩下的选择是使用一个具有短暂延迟的QTimer,它会在每次启动时重新启动,并且一旦用户等待足够长时间,超时实际上会更新你的滑块。

我还注意到您正在尝试使用非整数值与用于整数的QSpinBox设计。您可能想要尝试为浮动精度设计的QDoubleSpinBox。 valueChange()可能会像预期小数一样好一点。虽然我只是猜测,因为我没有测试过它:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qdoublespinbox.html

+0

我将“valueChanged”更改为“editingFinished”。谢谢! – 2012-02-23 05:24:51