在值和显示之间缩放的QDoubleSpinBox

时间:2018-07-20 06:45:35

标签: c++ qt qt5 qtwidgets

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

覆盖QDoubleSpinBox::textFromValue非常容易缩放内部值并附加单位符号。但是valueFromText()validate()方法有很多internal logic,它们强制执行最小/最大范围。由于这些用户所在的单位系统与用户使用的单位系统不同,因此将用户的最小和最大值限制为错误的值。

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

1 个答案:

答案 0 :(得分:0)

我建议您看看QDataWidgetMapper.,其中包含一个模型,该模型可能与显示值不同。通常,当您有多个窗口小部件时使用,但是也可以用于一个窗口小部件。

Qt的示例演示了如何使用它: http://doc.qt.io/qt-5/qtwidgets-itemviews-simplewidgetmapper-example.html

您将必须创建一个QStandardItemModel并指定要容纳的行数/列数。对于QDoubleSpinBox,它只能是一列。然后,您可以听取模型中的更改并相应地更新视图(即QDoubleSpinBox)。

高度可定制且易于使用。