Q针框编辑按上/下箭头的信号



我浏览了很多关于QSpinBox信号编辑完成和值更改的帖子,但无法解决我的问题,即,

  1. 我希望当用户输入任何值并按"Enter"时发出编辑完成信号。完成]
  2. 用户可以通过按键或鼠标按下使用向上/向下箭头更改值。这可以通过值更改信号来完成,但不能编辑完成

所以要实现这两个目标,我遇到了问题,假设我想输入 10000,所以 valueChanged 发出 1、10、100、1000、10000 我不想要,而是当用户输入 10000 后按 Enter 时应该发出。 因此,这是通过避免 valueChanged 并连接到 &QAbstractSpinbox::editDone 来完成的。

connect(ui->spinBox, &QSpinBox::editingFinished,
this, [&]()
{
ui->label->setText(QString::number(ui->spinBox->value()));
});

但我希望向上/向下箭头也能工作。 所以对于这个再次值更改是必需的。

有没有办法直接实现它,而不是添加我自己的旋转框类并覆盖向上/向下箭头单击/按下的事件。

任何建议不胜感激。

我认为您要查找的是确保禁用键盘跟踪属性(设置为false(。在大多数情况下,默认情况下true该属性。

正如Qt文档所述,在false打开keyboardTracking的情况下,只有在旋转框中按Enter键(或者如果用户按Tab离开或字段失去焦点(时,您只会获得valueChanged()(在Qt 5.14+中textChanged()(信号,而不是在编辑文本时。

不清楚为什么,但这确实是您需要的:

将旋转框的键盘跟踪属性设置为 false,然后执行以下操作:

void MainWindow::on_mySpinBox_valueChanged(int arg1)
{
on_mySpinBox_editingFinished();
}
void MainWindow::on_mySpinBox_editingFinished()
{
// what you need to be done, on spinbox loosing focus or arrows adjusting (and not while editing)
}

最新更新