QLineEdit 在获得由其他 returnPressed 信号触发的焦点时发出 returnPressed

QLineEdit emits returnPressed when getting focus triggered by other returnPressed singal

我有 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. 如果我在字段 2 中按 return,按钮会发出两次 clicked()。

对于第 1 点,我可以假设 return 按键事件在将焦点设置到 field2 后仍然处于活动状态。有没有办法避免这种情况?但是,如果是这种情况,为什么按钮只发出一次 clicked() 而不是像下一步那样发出两次?

如果我将连接 B 替换为

,则可以解决第 2 点
/* B */ connect(field2, &QLineEdit::returnPressed, button, &QPushButton::toggle);

然后 clicked() 只发出一次。但这对我来说并不清楚。 toggle() should only work for checkable buttons, but the button is not checkable. And also clicked() should not be emitted if toggle() is called.

我是否误解了这些概念?

我正在使用 Qt 5.12.9

更新

在写作过程中,我进行了一些测试,并将父对象形式 QDialog 更改为 QWidget,这解决了我的问题。所以我假设在 QDialog 上点击 return 以某种方式点击按钮。也许任何人都可以向我解释。提前致谢。

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

QDialog default button