2

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

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

4

2 回答 2

0

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

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

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

于 2020-06-14T02:36:23.127 回答
0

我可能会为您提供一些指导……让我们尝试一下。

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

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

处理名称状态等鼠标操作。查看源代码,您可以看到,问题的方法只是尝试将光标位置映射到有效的刻度盘位置。这里发生了“跳转”,您想禁用它(我尝试了几个控制键(向上/向下、向上/向下箭头、鼠标滚轮和鼠标单击/拖动),只有通过单击,您才能跳过未定义数量的值。 )。此外,您可能希望设置pageStep为您的应用程序支持的值。


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

Qt 5.6.0

于 2016-05-30T08:27:19.470 回答