2016-12-15 15 views
0

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

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

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

+2

Если ваш спин-бокс внезапно не позволяет удваивать больше, я бы сказал, что он концептуально отличается и должен быть заменен обычным полем для целых чисел. Если вам нужно, вы можете просто сосуществовать одновременно со спин-боксами, а затем при необходимости скрывать 'и()' и 'show()'. – oLen

+0

Это не плохое решение, даже если ему все равно потребуется вызвать 'hide()' и 'show()' для всех других комбо-записей, чтобы вернуться (как и 'setDecimals()' и 'setSingleStep()'). Добавьте это как ответ, если никто не придет ни с чем другим, это лучшая реализация, по сравнению с моим уродливым взломом. –

+1

Ваше решение с 'setDecimals' и' setSingleStep' просто и точно. Альтернативой является стекирование нескольких виджетов и синхронизация их значений: это больше работает. –

ответ

0

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

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

+0

Хотя я все еще считаю это жизнеспособной альтернативой, как отметил @KubaOber (и, как я узнал, сам), заключается в том, что синхронизация между ними также требует дополнительных усилий, поэтому я просто сделал условие, которое заставляет его использовать ' setDecimals() 'и' setSingleStep() 'соответственно, когда выбран этот конкретный комбо-элемент. –

 Смежные вопросы

  • Нет связанных вопросов^_^