如何避免 QDial 控件中的环绕现象?

3
我有一个QDial控件,我希望/需要阻止在最小值和最大值之间跳跃或循环。

animation of the behavior to avoid

我在文档和属性中都找不到任何东西。这真的可能吗?

从技术上讲,它不会溢出。不管怎样,为了得到所需的行为,你很可能需要自己编写控件或覆盖现有的控件,这是 Qt 控件常见的问题。 - dtech
问题在于我不想让从99到0的跳变太剧烈,因为这应该是后来的硬件信号,在GUI中不会像那样剧烈变化。 - Firewall-Alien
你不需要为此创建一个特殊的控件,可以阅读我下面的帖子。 - Aeonos
3个回答

1
这不是溢出。QDial会跟随光标的位置,无论它去到哪里,因此当光标靠近0时,值将被设置为0,而不考虑先前的值。
如果您想更改此行为,您需要创建自己的小部件(可以基于QDial进行继承或组合),在其中还要跟踪鼠标的位置,以强制用户按顺序遍历所有值。
另外,您说问题在于数值的变化非常陡峭,并且该值稍后会在硬件中使用。在这种情况下,您应该在GUI和硬件之间有一种控制器类,以确保值对于硬件是正确的。

0

https://doc.qt.io/qt-6/qdial.html 虽然我在谈论qt6,而且这个问题很旧了...

范围和返回的值与小部件的外观无关。 通过设置属性from、to和stepSize,您可以获得任何您想要的值。

外观被锁定,如果您想解决这个问题,您将不得不创建一个自定义小部件。


-1
在QDial属性中,转到QDial组并启用“wrapping”,这将解决您的问题 :)
该值是连续的。小于0的值将为-1、-2等,而大于最大值的值也将继续增加。因此,您需要使用模运算来计算实际值,但这比创建新控件要容易得多且更快速。

它不起作用。如果用户在99处并继续增加,值将变为100;然后应用“%”运算符,最终得到0。此外,包装也不起作用,就像你所说的那样,值仍然被限制在0和99之间。更糟糕的是,它允许用户使用鼠标滚轮从0到99再返回,这是没有包装无法实现的。 - Benjamin T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接