Qt4 QtGui QTreeWidgetItem setData包含浮点数
我想知道是否可以在QTreeWidgetItem中保留浮点值Qt4 QtGui QTreeWidgetItem setData包含浮点数,qt4,pyqt4,qtreewidget,Qt4,Pyqt4,Qtreewidget,我想知道是否可以在QTreeWidgetItem中保留浮点值 当我尝试使用setData(0,0,number)记录数字时,它将其舍入到6位精度,这对我来说是不够的。我想保留精确的浮点值,以便进一步计算。我认为使用QVariant和str可以做到这一点 a = 0.12345678963582 item.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(a))) ..... val = float(item.data(QtCore.Qt.User
当我尝试使用setData(0,0,number)记录数字时,它将其舍入到6位精度,这对我来说是不够的。我想保留精确的浮点值,以便进一步计算。我认为使用QVariant和str可以做到这一点
a = 0.12345678963582
item.setData(QtCore.Qt.UserRole,QtCore.QVariant(str(a)))
.....
val = float(item.data(QtCore.Qt.UserRole).toString()).strip())
您可以做两件事之一,QVariant可以存储任何类型:
v = QtCore.QVariant(aFloat)
aFloat = v.toDouble()[0]
然后将QVariant存储为数据
也可以对项目设置任意属性:
item = QtGui.QTreeWidgetItem()
item.foo = 123.123
你可以把它存储为一个字符串。嗯,我正在努力保持精度。字符串不够精确。怎么做?如果将Python
float
转换为字符串,它将保留其所有精度。您没有丢失任何东西。请给出一个带有实际值的简单代码示例。并说明您正在使用的python版本。@Blender:这仅在一定精度下是正确的,尽管这是不正确的。不管QVariantassert float(QtCore.QVariant(str(a)),您仍然在与字符串进行转换。toString())==a
这很奇怪!当我执行setData(1,QtCore.Qt.DisplayRole,QtCore.QVariant(number))时,它不再显示数字,而setData(1,QtCore.Qt.DisplayRole,number)起作用…将它的字符串版本设置为Qt.DisplayRole
,将QVariant float精确版本设置为Qt.UserRole
,以便您可以单独处理它们。或者使用我的建议,将其作为属性添加。