Qt QSpinbox: принимать только значения stepsize (16) - PullRequest
0 голосов
/ 09 октября 2018

Я хочу иметь спинбокс, который допускает только значения в шагах, таких как 0, 16, 32, ... Проблема в том, что с каждым введенным числом испускается сигнал valueChanged, и если я проверяю значения, например, округляя доследующий номер

if (value % incrX != 0)
{
    value = round(value / incrX) * incrX;
    ui->spinBoxX->setValue(value);
    return;
}

Это не работает, так как я не могу ввести "12".Первый раунд «1» до 0 и каждое последующее значение также приведут к 0.

Есть идеи?Я мог бы деактивировать редактирование и оставить только кнопки вверх-вниз.Или я мог бы пометить текст красным, если он недействителен, и пометить его как нормальный, если значение допустимо.

1 Ответ

0 голосов
/ 09 октября 2018

Используйте QSpinBox :: editFinished, например:

QSpinBox sb;
sb.setSingleStep(12);
QObject::connect(&sb, &QSpinBox::editingFinished, [&](){
   sb.setValue( sb.value() / sb.singleStep() * sb.singleStep() ) ; });
sb.show();

Или используйте делегат / валидатор, чтобы показать и отредактировать ваше конкретное поведение.

...