如何关闭QAbstractButton animateClick时,lineEdit有焦点

How to turn off QAbstractButton animateClick when lineEdit has focus

本文关键字:lineEdit 焦点 何关闭 QAbstractButton animateClick      更新时间:2023-10-16

我是QT GUI编程的新手,我正在使用QT Creator。我看到的问题是当用户按下回车键时,我的按钮和行编辑。我的程序打开一个组框,允许用户输入密码,然后按确定或取消。

如果用户在行编辑有焦点时按enter键,程序似乎会为QAbstractButton animateClick();发出第二个信号,所以当下一个组框打开并提示用户按ok或取消时,程序继续,就好像用户按ok按钮一样。

我设置了我的Push按钮,允许用户按tab键和回车键。为了获得此功能,我设置了okbutton-> setAutodefault(true);和cancelButton-> setAutodefault(true);

我也有一个lineEdit供用户输入密码并按enter键。我通过将返回按下的信号连接到如下所示的ok按钮来设置它。

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

我也尝试将返回按下的信号直接连接到插槽,但问题仍然发生。

connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));

如果用户用鼠标单击okButton或者我设置okButton-> setAutoDefault(false);,程序将正常运行。我想知道是否有可能禁用了当行编辑有焦点时发生的animateClick信号。

如果有任何帮助,我将不胜感激

尝试永远不要将lineEditokButton连接,即注释掉代码中的这一行:

connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));

并检查程序是否按照您的要求运行。


同样,你可能想调用

okButton->setDefault(true);

除了你的setAutoDefault()调用两个按钮,这取决于你到底想要发生什么,当用户按下输入与各种事物的焦点。有关此主题的更多信息,请参阅此回答。


我假设,因为您从未提及它,您没有为任何按钮调用setDefault()。因此,okButton是将autoDefault属性设置为true的第一个按钮。这意味着okButton成为对话框的"选择按钮",每当对话框必须处理输入按键,没有发生在其他autoDefault按钮(如cancelButton在你的情况下)。

每次对话框中的任何小部件收到输入键并且不消耗事件本身时,事件最终由对话框的默认按钮处理逻辑处理,这导致单击前面提到的"选择按钮"。

QLineEdit不用于多行编辑,因此它可能只是不消耗输入的按键事件(同时仍在处理它,因为它发出returnPressed()信号)。因此,returnPressed()的连接最终会做它正在做的任何事情,并且,另外,默认按钮逻辑最终会第二次单击您的按钮。

还可以查看Qt项目论坛上的这个线程,它似乎以不同的方式解决了同样的问题。