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

How Subclass QDial to Stop Moving from Min to Max?

本文关键字:移动 最大值 最小值 QDial 何停止 子类      更新时间:2023-10-16

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

为了做到这一点,我知道我必须对QDial进行子类。但我不知道从哪里开始。

我可以为您提供一些指导...让我们试试。

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

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

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


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

Qt 5.6.0

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

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

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