2012-08-17 136 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