0

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

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

我设置了我的 Push 按钮以允许用户按 Tab 键并按 Enter 键。为了获得这个功能,我设置了 okbutton->setAutodefault(true);和 cancelButton->setAutodefault(true);

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

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

我还尝试将返回按下信号直接连接到插槽,但问题仍然存在。

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

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

对此的任何帮助将不胜感激。

4

1 回答 1

0

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

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

并检查程序是否按您希望的方式运行。


另外,你可能想打电话

okButton->setDefault(true);

除了您setAutoDefault()在两个按钮上的调用之外,这取决于您在用户按下各种焦点时想要发生的Enter事情。有关此主题的更多信息,请参阅此答案


我假设,因为您从未提及它,所以您不需要setDefault()任何按钮。因此,okButton您的第一个按钮的autoDefault属性设置为true. 这意味着只要对话框必须处理在其他按钮上没有发生的按键(例如在您的情况下) ,它okButton就会成为对话框的“选择按钮” 。EnterautoDefaultcancelButton

每次对话框中的任何小部件收到Enter按键并且不使用事件本身时,事件最终都会由对话框的默认按钮处理逻辑处理,这会导致单击上述“选择按钮”。

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

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

于 2014-07-29T15:16:27.863 回答