2012-08-17 140 views
2

我想知道如果我可以在QTreeWidgetItem中保留浮点值?QtGui QTreeWidgetItem setData保存一个浮点数

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

+0

你可以把它保存为一个字符串。 – Blender 2012-08-17 01:13:37

+0

好吧,我正在努力保持精确度。字符串不够精确。 – Kiarash 2012-08-17 01:15:54

+0

如何?如果你将一个Python的float类型转换为一个字符串,它将保留所有的精度。你不会失去任何东西。 – Blender 2012-08-17 01:17:44

回答

1

你可以做一两件事情,一个的QVariant可以存储任何类型相当多:

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

你将存储的QVariant作为数据。

或者你可以设置的项目任意属性:

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

这很奇怪!当我做setData(1,QtCore.Qt.DisplayRole,QtCore.QVariant(数字))时它不再显示数字,而setData(1,QtCore.Qt.DisplayRole,数字)工作... – Kiarash 2012-08-17 21:00:56

+0

设置一个字符串版本它作为'Qt.DisplayRole'和QVariant将精确版本浮动为'Qt.UserRole',因此您可以分别处理它们。或者使用我的建议,只是将其添加为属性。 – jdi 2012-08-17 21:02:49

+0

第二个建议工作得很完美。谢谢。 – Kiarash 2012-08-17 21:08:36

0

使用的QVariant通过str可以做taht我觉得

a = 0.12345678963582 

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

..... 

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

只能达到一定的精度,但这是错误的。你仍然在转换字符串和从字符串转换,而不管QVariant – jdi 2012-08-17 20:36:40

+0

'assert float(QtCore.QVariant(str(a))。toString())== a' – jdi 2012-08-17 20:41:48