【问题标题】:QtGui QTreeWidgetItem setData holding a float numberQtGui QTreeWidgetItem setData 持有一个浮点数
【发布时间】:2012-08-13 11:25:25
【问题描述】:

我想知道是否可以在 QTreeWidgetItem 中保留浮点值?

当我尝试使用 setData(0,0,number) 记录数字时,它会将其四舍五入到 6 位精度,这对我来说还不够。我想保留准确的浮点值以供进一步计算。

【问题讨论】:

  • 您可以将其存储为字符串。
  • 好吧,我正在努力保持精度。字符串不够精确。
  • 怎么样?如果将 Python float 转换为字符串,它会保留其所有精度。你不会失去任何东西。
  • 请给出一个带有真实值的简单代码示例。并说明你使用的是哪个版本的python。
  • @Blender:这只是在一定的精度范围内才是正确的

标签: qt4 pyqt4 qtreewidget


【解决方案1】:

您可以做以下两件事之一,QVariant 几乎可以存储任何类型:

v = QtCore.QVariant(aFloat)
aFloat = v.toDouble()[0]

您会将 QVariant 存储为数据。

或者您可以在项目上设置任意属性:

item = QtGui.QTreeWidgetItem()
item.foo = 123.123

【讨论】:

  • 这很奇怪!当我执行 setData(1,QtCore.Qt.DisplayRole,QtCore.QVariant(number)) 时,它不再显示数字,而 setData(1,QtCore.Qt.DisplayRole,number) 工作...
  • 将它的字符串版本设置为Qt.DisplayRole,将QVariant浮点精确版本设置为Qt.UserRole,以便您可以分别对待它们。或者使用我的建议,将其添加为属性。
【解决方案2】:

我认为将 QVariant 与 str 一起使用可以做到这一点

a = 0.12345678963582

item.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(a)))

.....

val = float(item.data(QtCore.Qt.UserRole).toString()).strip())

【讨论】:

  • 这是不正确的。无论 QVariant 如何,您仍在与字符串相互转换
  • assert float(QtCore.QVariant(str(a)).toString()) == a
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 2012-09-07
  • 2020-08-09
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多