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

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

  1. 我希望在用户输入任何值并按“Enter”时发出 editingFinished 信号。[DONE]
  2. 用户可以通过 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 类并覆盖向上/向下箭头单击/按下的事件。

欢迎提出任何建议。

【问题讨论】:

    标签: qt qwidget qspinbox


    【解决方案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)
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2020-02-07
      • 2018-06-01
      • 2019-05-15
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 2013-04-24
      • 2022-11-08
      相关资源
      最近更新 更多