2017-06-29 5 views
1

Ich habe einige Daten in Fixpunkt 16.16, die ich mit einer QDoubleSpinbox ändern möchte.Fill QDoubleSpinBox von Fixpunkt

Das Problem ist, dass, wenn ich meinen Fixpunkt zu einem Doppel konvertiere, das unvermeidliche Rundungsproblem besteht. double = fixed/(double)65536

Nehmen Sie zum Beispiel 0.2, in festen Punkt ist 0x00003333, aber wenn ich es in die QDoubleSpinBox legte es zeigt0.19999694824188.
Aber sobald ich die Spinbox berühre, rundet sie auf 0.2.

Wie mache ich die QDoubleSpinBox um setValue?


Die QDoubleSpinbox verhält, wie entworfen, aber mein QAbstractTableModel war es nicht.
Wenn die Steuerelemente der Spinnbox nicht sichtbar sind, verwendet die Tabelle implizit einen QString, um den in QVariant angegebenen Wert anzuzeigen.
Nach der Implementierung der paint() Funktion mit einer festen Präzision setnum() in der Qstring, funktioniert es gut!

+0

Siehe die Eigenschaft Dezimalzahlen. Die Spinbox-Runden basieren auf diesem Wert: https://doc.qt.io/qt-5/qdoublespinbox.html#decimals-prop – Felix

Antwort

0

Ein schneller Test zeigt, dass dies hier funktioniert:

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

Die Benutzeroberfläche zeigt 0,20. Die Spinbox wird beim Aufruf von setValue() abgerundet. Sie können the source code selbst überprüfen. Ich schlage vor, mit einem Debugger in die Funktion zu gehen, um zu sehen, was für Sie anders ist.

+0

Siehe die Änderung. Nachdem ich auf die Quelle geschaut hatte, schaute ich in den Behälter der Spinbox. Und da war es. – Jeroen3