首页 > 解决方案 > Qt QSpinbox:只接受步长的值(16)

问题描述

我想要一个旋转框,它只允许诸如 0、16、32 等步骤的值......问题是,对于每个输入的数字,valueChanged 信号都会发出,如果我检查这些值,例如通过四舍五入到下一个数字

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

这不起作用,因为我无法输入“12”。第一个“1”轮到 0,并且每个后续值也将导致 0。

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

标签: qtqspinbox

解决方案


使用 QSpinBox::editingFinished,像这样:

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

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


推荐阅读