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 上/下箭头上的信号的主要内容,如果未能解决你的问题,请参考以下文章
6.QT:spinbox(spindoublebox)控件的信号响应
PyQt4:结合 textChanged 和 editingFinished 为 QLineEdit