qt - 当获得由其他 returnPressed 信号触发的焦点时,QLineEdit 发出 returnPressed
问题描述
我有 2 个 QlineEdit 和一个 QPushbutton
QLineEdit *field1 = new QlineEdit();
QLineEdit *field2 = new QLineEdit();
QPushButton *button = new QPushButton();
我想要的是:
- 如果用户在 field1 中按下 return,则焦点将更改为 field2。
- 如果用户在字段 2 中按下返回,则应单击该按钮。
为此,我有:
/* A */ connect(field1, &QLineEdit::returnPressed, field2, QOverload<>::of(&QLineEdit::setFocus));
/* B */ connect(field2, &QLineEdit::returnPressed, button, &QPushButton::click);
/* C */ connect(submit, &QPushButton::clicked, this, &SomeClass::SomeFunction);
现在发生的事情是:
- 如果我在 field1 中按 return,焦点转到 field2,但按钮会发出 clicked()。
- 如果我在 field2 中按返回,按钮会发出两次 clicked()。
对于第 1 点,我可以假设在将焦点设置为 field2 后,按下返回键事件仍然处于活动状态。有没有办法避免这种情况?但如果是这种情况,为什么按钮只发出一次 clicked() 而不是像下一步那样发出两次?
如果我将连接 B 替换为,则可以解决第 2 点
/* B */ connect(field2, &QLineEdit::returnPressed, button, &QPushButton::toggle);
然后 clicked() 只发出一次。但这对我来说并不清楚。toggle() 应该只适用于可检查按钮,但按钮不可检查。如果调用 toggle() 也不应该发出clicked() 。
我误解了这些概念吗?
我正在使用 Qt 5.12.9
更新
在编写过程中,我进行了一些测试,并将父对象从 QDialog 更改为 QWidget,这解决了我的问题。所以我假设在 QDialog 上点击返回会以某种方式点击按钮。也许任何人都可以向我解释。提前致谢。
解决方案
QDialog
有一个默认按钮,在按下 Return 时触发。
这就是为什么在这两种情况下你总是有额外clicked()
的。
推荐阅读
- python - 使用 python sql 连接器执行简单的存储过程
- python - 替换字符串中的每个第二个字符
- ubuntu - XAMPP 另一个 Web 服务器已经在运行。尝试
- tensorflow - 无法将 Tensorflow 标量摘要写入事件日志
- wpf - WPF DataGrid:获取单元格行索引的有效方法
- javascript - 在 Node.js 中的 Array 中使对象数组成为对象的值
- elixir - How can I pass a nested key to a map as a variable?
- c - 将指针传递给新线程的堆栈变量 - 这段代码安全吗?
- android - Android Emulator 7.1.1 white screen
- hyperlink - How to remove hyperlink on my text