当获得其他returnPressed信号触发的焦点时,QLineEdit发出returnPressed 更新

问题描述

我有2个QlineEdit和一个QPushbutton

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

我想要什么:

  • 如果用户在field1中按下return键,则焦点应更改为field2。
  • 如果用户在field2中按下return键,则应单击该按钮。

为此,我有:

/* A */ connect(field1,&QLineEdit::returnPressed,field2,QOverload<>::of(&QLineEdit::setFocus));
/* B */ connect(field2,button,&QPushButton::click);
/* C */ connect(submit,&QPushButton::clicked,this,&SomeClass::SomeFunction);

现在发生的是:

  1. 如果我在field1中按回车键,则焦点将移至field2,但按钮将发出clicked()。
  2. 如果我在field2中按Return键,则按钮将发出两次clicked()。

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

如果我将连接B替换为

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

然后clicked()仅发出一次。但这对我来说还不清楚。 toggle() should only work for checkable buttons,但button is not checkable。并且clicked()应该not be emitted if toggle() is called

我会误解这些概念吗?

我正在使用Qt 5.12.9

更新

在编写过程中,我进行了一些测试,并将父对象从QDialog更改为QWidget,从而解决了我的问题。因此,我假设按某种方式在QDialog上单击return会单击按钮。也许任何人都可以向我解释。预先感谢。

解决方法

QDialog具有一个默认按钮,该按钮在按下Return键时触发。
这就是为什么在两种情况下总是要多加一个clicked()的原因。

QDialog default button

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...