我是QT GUI编程的新手,我正在使用QT Creator。我看到的问题是当用户按下回车键时我的按钮和行编辑。我的程序打开一个组合框,允许用户输入密码并按确定或取消。
如果用户在行编辑具有焦点时按下回车键,程序似乎会发出QAbstractButton animateClick();
的第二个信号。因此,当下一个组框打开并提示用户按下确定或取消时,程序继续,就像用户按下确定按钮一样。
我设置了Push按钮,允许用户按Tab键并按Enter键。为了获得此功能,我设置了okbutton-> setAutodefault(true);
和cancelButton-> setAutodefault(true);
我还有一个lineEdit供用户输入密码并按回车键。我通过将返回信号连接到下面显示的ok按钮来设置它。
connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));
我还尝试将返回按下的信号直接连接到插槽,但问题仍然存在。
connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(chkPassword()));
如果用户使用鼠标单击okButton或我设置okButton-> setAutoDefault(false);
,程序将按预期运行。我想知道是否可以禁用行编辑具有焦点时发生的animateClick信号。
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
请勿尝试将lineEdit
与okButton
联系起来,即在代码中注释掉这一行:
connect(lineEdit, SIGNAL(returnPressed()), okButton, SIGNAL(clicked()));
并检查程序是否按照您的意愿运行。
此外,您可能想要致电
okButton->setDefault(true);
除了对两个按钮进行setAutoDefault()
次调用之外,还取决于当用户按下 Enter 以及各种焦点时,您想要发生什么。有关此主题的更多信息,请参阅this answer。
我认为,既然你从未提及它,你就不会为任何按钮调用setDefault()
。因此,okButton
是您将autoDefault
属性设置为true
的第一个按钮。这意味着okButton
成为对话框的首选按钮"每当对话框必须处理 Enter 按键时,在其他autoDefault
按钮(例如cancelButton
)中没有发生这种情况。
每当对话框中的任何窗口小部件都收到 Enter 按键并且不会消耗事件本身时,事件最终会被对话框的默认按钮处理逻辑处理,从而导致点击前面提到的"按钮"。
QLineEdit
不用于多行编辑,因此它可能只是不消耗 Enter 的按键事件(同时仍在处理它,因为它发出了{ {1}}信号)。因此,returnPressed()
的连接最终会执行任何操作,而另外,默认按钮逻辑最终会再次单击您的按钮。
同时查看this thread on the Qt project forums,它似乎以不同的方式解决了同样的问题。