Временно используйте целые числа с QDoubleSpinBox

Предположим, у меня есть целая группа счетчиков, выпадающих списков и многого другого, где я могу устанавливать всевозможные переменные для приложения; панель управления, если хотите. Один из них — QDoubleSpinBox *dec, и, как правило, я использую его как положено, с десятичными знаками, но есть некое поле со списком, которое динамически включает/отключает некоторые счетчики и поля со списком, в зависимости от выбранной записи. Одно из таких изменений использует счетчик dec, который только на этот раз должен быть ограничен целыми значениями и приращениями.

Например, если dec обычно имеет диапазон 0.00..99.99, а приращение равно 0.1, когда я выбираю эту определенную запись в управляющем поле со списком, мне нужно, чтобы dec было в том же диапазоне (99 просто отлично), но выдавать только целые числа, и возможность изменения только с целочисленными шагами (т.е. диапазон 0..99, размер шага 1).

Хотя я обнаружил (новичок в Qt), что могу просто установить setDecimals() и setSingleStep() для этой конкретной записи в поле со списком, оказалось, что я должен использовать их для всех, чтобы иметь возможность отменить изменения, которые могут добавить к коду. Есть ли лучшее решение для этого?


person a concerned citizen    schedule 15.12.2016    source источник
comment
Если ваш спин-бокс вдруг больше не допускает удвоения, я бы сказал, что он концептуально отличается и должен быть заменен обычным спин-боксом для целых чисел. Если вам нужно, вы можете просто сосуществовать с обоими счетчиками, а затем hide() и show() при необходимости.   -  person oLen    schedule 15.12.2016
comment
На самом деле это неплохое решение, даже если для возврата все равно потребуется вызывать hide() и show() для всех остальных комбинированных записей (точно так же, как setDecimals() и setSingleStep()). Добавьте это в качестве ответа, если никто не придет ни с чем другим, это лучшая реализация по сравнению с моим уродливым взломом.   -  person a concerned citizen    schedule 15.12.2016
comment
Ваше решение с setDecimals и setSingleStep простое и точное. Альтернативой является стек нескольких виджетов и синхронизация их значений: это намного больше работы.   -  person Kuba hasn't forgotten Monica    schedule 16.12.2016


Ответы (1)


Если ваш спин-бокс вдруг больше не допускает удвоения, я бы сказал, что он концептуально отличается и должен быть заменен обычным QSpinBox для целых чисел.

Вы можете просто сосуществовать с обоими счетчиками, а затем hide() и show() при необходимости. Это также позволяет избежать непрерывного литья между int и double.

person oLen    schedule 16.12.2016
comment
Хотя я по-прежнему считаю это жизнеспособной альтернативой, как указал @KubaOber (и, как я выяснил, сам), синхронизация между ними также требует дополнительных усилий, поэтому я просто сделал условное выражение, которое заставляет его использовать setDecimals() и setSingleStep() соответственно, когда выбрана эта конкретная комбинированная запись. - person a concerned citizen; 17.12.2016