QDoubleSpinBox,可在值和显示之间进行缩放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QDoubleSpinBox,可在值和显示之间进行缩放相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个自定义的QDoubleSpinBox子类,它的内部值和显示值之间有一个缩放因子/函数。这样做的目的是支持在不同单元中显示相同的内部值(例如,允许用户选择是否显示米,毫米或英寸,但始终以米为单位存储实际值)。

覆盖QDoubleSpinBox::textFromValue非常简单,可以扩展内部值并附加单位符号。然而,valueFromText()validate()方法有很多internal logic强制最小/最大界限。由于这些系统与用户使用的系统处于不同的单位系统,因此会限制用户使用不正确的最小值和最大值。

理想情况下,我希望避免重新实现/复制和粘贴所有这些内部私有逻辑,只是为了在从文本解析它时实现值的缩放。有没有人对如何避免这个有任何建议?

答案

我建议你看看QDataWidgetMapper.它包含一个模型,它可以与显示值不同。它通常在您有多个窗口小部件时使用,但也可用于单个窗口小部件。

Qt有一个例子,展示如何使用它:http://doc.qt.io/qt-5/qtwidgets-itemviews-simplewidgetmapper-example.html

您将不得不创建一个QStandardItemModel并指定您希望它保持多少行/列。在QDoubleSpinBox的情况下,它可以只是一列。然后,您可以聆听模型中的更改并相应地更新您的视图(即QDoubleSpinBox)。

它高度可定制且易于使用。

以上是关于QDoubleSpinBox,可在值和显示之间进行缩放的主要内容,如果未能解决你的问题,请参考以下文章

QT Designer:设置Qdoublespinbox后缀

如何更改 QDoubleSpinbox 的文本格式?

QDoubleSpinBox:停止发射中间值

QDoubleSpinBox浮点型数字调节框

Qt QSpinBox 和 QDoubleSpinBox

如何禁用 QDoubleSpinBox 中的向上/向下按钮