我希望有一个Spinbox,它仅允许诸如0、16、32等步骤中的值。 问题是,对于每个输入的数字,都会发出valueChanged信号,如果我例如通过四舍五入到下一个数字来检查值,则为
if (value % incrX != 0)
{
value = round(value / incrX) * incrX;
ui->spinBoxX->setValue(value);
return;
}
这不起作用,因为我不能输入“ 12”。第一个“ 1”舍入为0,每个值都将也为0。
有什么想法吗?我可以取消编辑,只留下上下按钮。或者,如果无效,我可以将文本标记为红色,如果有效,则将其标记为正常。
答案 0 :(得分:1)
使用QSpinBox :: editingFinished,就像这样:
QSpinBox sb;
sb.setSingleStep(12);
QObject::connect(&sb, &QSpinBox::editingFinished, [&](){
sb.setValue( sb.value() / sb.singleStep() * sb.singleStep() ) ; });
sb.show();
或使用委托人/验证者来显示和编辑您的特定行为。