【发布时间】:2020-10-09 10:32:12
【问题描述】:
我有 2 个 QlineEdit 和一个 QPushbutton
QLineEdit *field1 = new QlineEdit();
QLineEdit *field2 = new QLineEdit();
QPushButton *button = new QPushButton();
我想要什么:
- 如果用户在字段 1 中按下返回,焦点应更改为字段 2。
- 如果用户在字段 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 中按回车键,焦点会转到 field2,但按钮会发出 clicked()。
- 如果我在 field2 中按回车,按钮会发出两次 clicked()。
对于第 1 点,我可以假设在将焦点设置为 field2 后,按下返回键事件仍然处于活动状态。有没有办法避免这种情况?但如果是这种情况,为什么按钮只发出一次 clicked() 而不是像下一步那样发出两次?
如果我将连接 B 替换为,则可以解决第 2 点
/* B */ connect(field2, &QLineEdit::returnPressed, button, &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 上点击返回会以某种方式点击按钮。也许任何人都可以向我解释。提前致谢。
【问题讨论】:
标签: qt qpushbutton qlineedit qdialog