gpt4 book ai didi

c++ - 通过按 Enter 完成编辑后更改或清除对 QLineEdit 的关注,并且仅在 Qt 中发送一个信号

转载 作者:行者123 更新时间:2023-11-28 05:47:03 24 4
gpt4 key购买 nike

我想创建一种行为,当我完成对文本的编辑时,焦点要么移动到下一个 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/

24 4 0
文章推荐: html - 如何使每个
文章推荐: html - 垂直居中多行
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com