qt - 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。
有任何想法吗?我可以取消激活编辑并只保留上下按钮。或者,如果无效,我可以将文本标记为红色,如果值有效,则将其标记为正常。
解决方案
使用 QSpinBox::editingFinished,像这样:
QSpinBox sb;
sb.setSingleStep(12);
QObject::connect(&sb, &QSpinBox::editingFinished, [&](){
sb.setValue( sb.value() / sb.singleStep() * sb.singleStep() ) ; });
sb.show();
或者使用委托/验证器来显示和编辑您的特定行为。
推荐阅读
- javascript - 如何让引导轮播滑动?
- wordpress - How to use wp theme and author uri
- laravel - 通过在 Laravel 中传递令牌获取用户 ID
- mysql - 烧瓶无法在docker compose中连接mysql
- python - 用布尔值替换 Pandas 系列中的数字
- laravel - 如何将查询转换为 Laravel Eloquent ORM
- c# - 有没有办法可以通过 cts.Cancel(); 立即停止正在运行的方法?
- spring - 我们如何在内存重启中禁用 Springboot 中的会话清除
- magento - 为特定产品启用支付网关 - Magento 2
- kubernetes - ArangoDB 初始化容器在 minikube 上失败