如何在按住向上/向下(键盘)的同时减慢QSpinBox滚动速度

时间:2016-04-18 08:03:59

标签: c++ qt

方案如下: 当我的活动Widget是QSpinBox时,我可以通过单击或按住框中的箭头或按或按住 Page Up / 来更改值Page Down / /

问题是,我在 valueChanged()上有一些硬件通信需要几毫秒。 虽然我permascroll(鼠标)或按住方框箭头,这不是一个问题,因为滚动似乎在这里较慢(加速关闭),但当我使用我的键盘(加速也关闭),滚动速度是更快,这会导致计时问题。应用程序变慢,然后冻结几秒钟,直到事件队列结束。

我需要允许使用键盘输入(包括按住键盘键),所以我想知道是否有办法减慢箭头/页面上/下键的重复率。

实际上我正在触发一个200毫秒的单触发定时器,值改变了,它在超时时传递了旋转框值。只有在计时器未运行时才会触发计时器。这意味着当我更改值时,它将始终具有200毫秒的延迟,并且更新频率只能 5更新/秒或更慢。它确实有效,但我真的希望通过某种方式降低密钥重复率来改善这一点。

2 个答案:

答案 0 :(得分:0)

好吧,不,我看到了问题。这里的问题是按钮保持键盘偿还字符。

要在没有与键盘直接交互的情况下解决此问题,我会尝试使用event filter,观察key press events并拒绝其中一些,如果它们快到达。

答案 1 :(得分:0)

您的设备通信子系统有两种状态:忙碌和可用。当它忙碌时,您应该安排目标中特定变量的更新,但暂时不执行它。当先前的通信完成并且子系统可用时,它应该拾取任何未完成的更改并传播它们。