Заполнить QDoubleSpinBox из фиксированной точки

У меня есть некоторые данные, доступные в фиксированной точке 16.16, которые я хотел бы изменить с помощью QDoubleSpinbox.

Проблема в том, что всякий раз, когда я конвертирую свою фиксированную точку в двойную, возникает неизбежная проблема с округлением. double = fixed / (double)65536

Возьмем, к примеру, 0.2, в фиксированной точке это 0x00003333, но когда я помещаю его в QDoubleSpinBox, он отображает 0.19999694824188.
Но как только я прикасаюсь к счетчику, оно округляется до 0.2.

Как сделать QDoubleSpinBox круглым при setValue?


QDoubleSpinbox ведет себя так, как задумано, но мой QAbstractTableModel не был.
Когда элементы управления счетчиком не видны, таблица неявно использует QString для отображения значения, заданного в QVariant.
После реализации функции paint() с фиксированная точность setnum() в qstring отлично работает!


person Jeroen3    schedule 29.06.2017    source источник
comment
См. свойство десятичных знаков. Счетчик округляет на основе этого значения: doc.qt.io/qt- 5/qdoublespinbox.html#decimals-prop   -  person Felix    schedule 29.06.2017


Ответы (1)


Быстрый тест показывает, что это работает здесь:

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

Пользовательский интерфейс показывает 0,20. Spinbox выполняет округление при вызове setValue(). Вы можете проверить исходный код самим собой. Я предлагаю войти в функцию с помощью отладчика, чтобы увидеть, что для вас отличается.

person Thomas McGuire    schedule 29.06.2017
comment
Смотрите редактирование. Посмотрев на источник, я заглянул в контейнер спинбокса. И вот оно. - person Jeroen3; 29.06.2017