Qt QSpinbox:仅接受stepsize的值(16)

时间:2018-10-09 07:27:19

标签: qt qspinbox

我希望有一个Spinbox,它仅允许诸如0、16、32等步骤中的值。 问题是,对于每个输入的数字,都会发出valueChanged信号,如果我例如通过四舍五入到下一个数字来检查值,则为

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

这不起作用,因为我不能输入“ 12”。第一个“ 1”舍入为0,每个值都将也为0。

有什么想法吗?我可以取消编辑,只留下上下按钮。或者,如果无效,我可以将文本标记为红色,如果有效,则将其标记为正常。

1 个答案:

答案 0 :(得分:1)

使用QSpinBox :: editingFinished,就像这样:

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

或使用委托人/验证者来显示和编辑您的特定行为。