QSpinbox editingFinished 上/下箭头上的信号

Posted

技术标签:

【中文标题】QSpinbox editingFinished 上/下箭头上的信号【英文标题】:QSpinbox editingFInished signal on up/down arrow press 【发布时间】:2020-05-22 02:06:27 【问题描述】:

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

    我希望在用户输入任何值并按“Enter”时发出 editingFinished 信号。[DONE] 用户可以通过 keyPress 或 mousePress 使用向上/向下箭头更改值。这可以通过 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()));
    );

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

有什么方法可以直接实现它,而不是添加我自己的 spinbox 类并覆盖向上/向下箭头单击/按下的事件。

欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

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

正如 Qt 文档所述,在 false 上使用 keyboardTracking 时,一旦在旋转框中按下 Enter (或者如果用户离开选项卡),您只会收到 valueChanged()(和 Qt 5.14+ 中的 textChanged())信号或该字段失去焦点),而不是在编辑文本时。

【讨论】:

@SayanBera 请解释一下?在false 上使用kayboardTracking,只有在旋转框中按下Enter/Tab 时,才会收到valueChanged()(和Qt 5.14+ 中的textChanged())信号,而不是在编辑文本时。或者你有什么特别想要editingFinished的理由?【参考方案2】:

不清楚为什么,但这可以满足您的需要:

将 spinbox 的 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)

【讨论】:

以上是关于QSpinbox editingFinished 上/下箭头上的信号的主要内容,如果未能解决你的问题,请参考以下文章

QSpinBox信号用于箭头按钮

6.QT:spinbox(spindoublebox)控件的信号响应

PyQt4:结合 textChanged 和 editingFinished 为 QLineEdit

QT中QLineEdit的editingFinished()信号在按下回车时会触发两次的解决办法

PyQt5组件之QSpinBox

到达终点时循环QSpinbox