问题描述
Qt的QSpinBox和QDoubleSpinBox两个控件在默认情况下是valueChanged
信号,会响应每次输入栏的改变,加入你输入200,valueChanged
会在输入2,20,200的时候都会emit,前2次的数据其实是无效的,假如连接的槽函数涉及非常耗时或者界面改变非常明显的操作,这样就不太好了,下面就尝试去解决它。
方法一
我想到的第一种方法就是不使用valueChanged
信号,而使用editingFinished
信号,这样的话输入栏只会在你按下回车或者把光标移动到别处的时候做出相应(俗称的失去焦点)。似乎是解决了问题,但又出现了另一个问题,点击 上/下 按钮时也不会做出任何相应,这个是我不愿意看到的。解决办法是自己创建一个继承QSpinBox的子类,然后重写鼠标事件和键盘事件来然它能够响应 上/下 按钮的点击。
方法二
这样做有点麻烦,感觉这个功能并不是这么的特殊,Qt不会没有考虑的,然后就在仔细看了文档,看到QAbstractSpinBox类的文档下面有一个setKeyboardTracking()
方法,文档是这样写的:
This property holds whether keyboard tracking is enabled for the spinbox.
If keyboard tracking i