子类QDial如何停止从最小值移动到最大值?

时间:2016-05-30 06:53:06

标签: c++ qt subclass qdial

我想继承QDial, 因为当您处于最小值时,您可以轻松地将值更改为最大值(通过下降)。从最大到最小的问题相同。

为了做到这一点,我知道我必须继承QDial。 但我不知道从哪里开始。

2 个答案:

答案 0 :(得分:0)

我可以为你提供一些指导......试试吧。

首先,您应该从QDial开始,而不是QAbstractSlider,因为您应该重新实现的目标方法是

  • virtual void mouseMoveEvent(QMouseEvent *e)
  • virtual void mousePressEvent(QMouseEvent *e)
  • virtual void mouseReleaseEvent(QMouseEvent *e)

处理类似名称状态的鼠标操作。查看您可以看到的source,问题的方法只是尝试将光标位置映射到有效的拨号位置。在这里跳跃'发生了,你想要禁用(我尝试了几个控制键(向上/向下翻页,向上/向下箭头,鼠标滚轮和鼠标点击/拖动),只有点击你可以跳过一定数量的值。)。此外,您可能希望将pageStep设置为应用程序支持的值。

作为一种解决方案,我可能会建议您采用valueFromPoint方法的结果,并递减或递增(如果值更小或更大)当前值,而不是将其设置为结果。这应该禁用跳转。

Qt 5.6.0

答案 1 :(得分:0)

我遇到这个问题,正在寻找有关如何更改某些拨号属性的信息。您可以使用setWrapping(bool)插槽来停止刻度盘上的滑块从“最小”移动到“最大”(跳跃)。

myNewDial = new QDial(whateverYourQWidgetIs);
myNewDial->setWrapping(true);

这将为您提供滑块的完整360度运动范围。