QSpinbox editingFInished 信号 up/down 箭头按下

QSpinbox editingFInished signal on up/down arrow press

我浏览了很多关于 QSpinBox 信号 editingFinished 和 valueChanged 的​​帖子,但无法解决我的问题,即,

  1. 我希望在用户输入任何值并按下 "Enter" 时发出 editingFinished 信号。[DONE]
  2. 用户可以通过 keyPress 或 mousePress 使用 up/down 箭头更改值。这可以通过 valueChange 信号来完成,但不能通过 editingFinished

所以要同时实现这两者,我遇到了问题,假设我想输入 10000,那么 valueChanged 会发出 1、10、100、1000、10000 我不想要,而是当用户在输入 10000 后按下回车时它应该发出。 因此,这是通过避免 valueChanged 并连接到 &QAbstractSpinbox::editingFinished 来完成的。

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

但我希望 up/down 箭头也能正常工作。所以为此再次需要 valueChanged。

有什么方法可以直接实现它,而不是添加我自己的旋转框 class 并覆盖 up/down 箭头的事件 click/press。

欢迎任何建议。

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

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

不清楚原因,但这可以满足您的需要:

将旋转框的 keyboardTracking 属性 设置为 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)
}