2017-06-29 70 views
1

我有一些數據可用於定點16.16,我想用QDoubleSpinbox修改。從定點填充QDoubleSpinBox

問題是,無論何時將我的固定點轉換爲雙精度值,都存在不可避免的舍入問題。 double = fixed/(double)65536

就拿0.2,在固定點,這是0x00003333,但是當我把它放到QDoubleSpinBox它顯示0.19999694824188
但是,只要我碰到了紡絲箱,它就會輪到0.2

如何使QDoubleSpinBox在setValue上舍入?


的QDoubleSpinbox被表現爲設計,但我的QAbstractTableModel不是。
當spinbox的控件不可見時,該表格隱式使用QString來顯示QVariant中給出的值。
在qstring中使用固定精度setnum()執行paint()函數後,它的效果非常好!

+0

請參閱小數位數屬性。 spinbox基於此值輪播:https://doc.qt.io/qt-5/qdoublespinbox.html#decimals-prop – Felix

回答

0

簡單的測試表明,該作品在這裏:

double valueToSet = 0x00003333/(double)65536; 
ui.doubleSpinBox->setValue(valueToSet); 

的UI顯示0.20。調用setValue()時,Spinnerbox將進行四捨五入。你可以自己檢查the source code。我建議您使用調試器進入該功能,以查看您的不同之處。

+0

請參閱編輯。查看源代碼後,我查看了spinbox的容器。就在那裏。 – Jeroen3