我想创建一种行为,当我完成对文本的编辑时,焦点要么移动到下一个 child ,要么在我按下“Enter”时清除当前字段上的焦点。然后我会得到一个信号来触发部分代码。
当我执行 editingFinished() 并使用 focusNextChild() 或 clearFocus() 为“Enter”重新实现 keyReleaseEvent() 时,我收到两个文本编辑信号,一个是按下“Enter”,另一个是焦点通过 focusNextChild() 或 clearFocus() 进行更改。额外的信号是不需要的。
如果我使用 focusNextChild() 或 clearFocus() 执行 returnPressed() 并为“Enter”重新实现 keyReleaseEvent(),它只会创建一个信号,但我还希望在用户退出 lineEdit 时创建信号tab() 或鼠标单击任何其他行项目,如果我使用 returnPressed() 则不会出现这种情况
理想情况下,我可以在 lineEdit 失去焦点时使用信号,它连接到运行代码的插槽,我可以为“Enter”重新实现 keyReleaseEvent() 来设置焦点,但它看起来不像这样Qt 中存在一个信号。
有没有人对如何实现这个或更好的方法有建议?
最佳答案
您可以在需要时连接/断开信号。例如,当您关注 QLineEdit 时,您可以将两个列出的信号连接到插槽,这将断开这两个连接并将焦点移动到下一个子级。因此,您只会处理一个信号。
另一种解决方案 - 您可以在槽的开头调用 QLineEdit.blockSignals(true) 并在槽的末尾调用 QLineEdit.blockSignals(false) 。在这种情况下,无论您在插槽中做什么,都不会触发 QLineEdit 中的任何信号,也不会出现重复信号。
关于c++ - 通过按 Enter 完成编辑后更改或清除对 QLineEdit 的关注,并且仅在 Qt 中发送一个信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36019857/