首页 > 解决方案 > 当获得由其他 returnPressed 信号触发的焦点时,QLineEdit 发出 returnPressed

问题描述

我有 2 个 QlineEdit 和一个 QPushbutton

QLineEdit *field1 = new QlineEdit();
QLineEdit *field2 = new QLineEdit();
QPushButton *button = new QPushButton();

我想要的是:

为此,我有:

/* 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);

现在发生的事情是:

  1. 如果我在 field1 中按 return,焦点转到 field2,但按钮会发出 clicked()。
  2. 如果我在 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 上点击返回会以某种方式点击按钮。也许任何人都可以向我解释。提前致谢。

标签: qtqpushbuttonqlineeditqdialog

解决方案


QDialog有一个默认按钮,在按下 Return 时触发。
这就是为什么在这两种情况下你总是有额外clicked()的。

QDialog默认按钮


推荐阅读