c++ - QDoubleSpinBox 在值和显示之间进行缩放
问题描述
我正在尝试编写一个自定义QDoubleSpinBox
子类,该子类在其内部值和显示值之间具有比例因子/函数。这样做的目的是支持以不同的单位显示相同的内部值(例如,允许用户选择是否显示米、毫米或英寸,但始终以米为单位存储实际值)。
覆盖QDoubleSpinBox::textFromValue
非常简单,可以缩放内部值并附加单位符号。然而valueFromText()
andvalidate()
方法有很多内部逻辑来强制最小/最大界限。由于这些与用户正在使用的单位系统不同,因此它将用户限制为不正确的最小值和最大值。
理想情况下,我想避免重新实现/复制和粘贴所有这些内部私有逻辑,只是为了在从文本中解析值时实现值的缩放。有人对如何避免这种情况有任何建议吗?
解决方案
我建议您查看QDataWidgetMapper.
它包含一个模型,该模型可能与显示值不同。它通常在您拥有多个小部件时使用,但也可用于一个小部件。
Qt
有一个示例说明如何使用它:
http ://doc.qt.io/qt-5/qtwidgets-itemviews-simplewidgetmapper-example.html
您将必须创建一个QStandardItemModel
并指定您希望它保留多少行/列。在这种情况下,QDoubleSpinBox
它可以只是一列。然后您可以聆听模型中的更改并相应地更新您的视图(即QDoubleSpinBox
)。
它高度可定制且易于使用。
推荐阅读
- linux - 项目错误:QT 中的未知模块:x11extras
- javascript - 检查关联对象中每个键的两个值是否为真
- r - 如何将变量限制为 5 位但确保它仅从右侧删除
- python - 是否有可能使用 matplotlib 在对数刻度上显示 0?
- sql-server - 修复 SQL Server 中的日期时间字符串
- dictionary - F# 中不可变的可变字典
- webview - Google 将停止支持从嵌入式浏览器框架登录 Google 帐户
- swiftui - SwiftUI 使用 Coordinator 和 UIViewControllerRepresentable 发送短信
- reactjs - 使用简单的代码段为 ReactJs 条纹支付按钮
- docker - 尝试与 Jaeger 代理守护进程对话时,EKS 连接被拒绝