首页 文章

如何在lineEdit具有焦点时关闭QAbstractButton animateClick

提问于
浏览
0

我是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信号 .

任何有关这方面的帮助将不胜感激 .

1 回答

  • 0

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

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

    并检查程序是否按照您的意愿运行 .


    此外,您可能想要打电话

    okButton->setDefault(true);
    

    除了两个按钮上的 setAutoDefault() 调用之外,还取决于当用户按下Enter键时您想要发生什么,并且有各种关注点 . 有关此主题的更多信息,请参见this answer .


    我假设,因为你从未提及它,你不会为任何按钮调用 setDefault() . 因此, okButton 是您的第一个按钮, autoDefault 属性设置为 true . 这意味着只要对话框必须处理在某些其他 autoDefault 按钮上没有发生的Enter按键(例如 cancelButton ), okButton 就会成为对话框的"button of choice" .

    每当对话框中的任何窗口小部件都收到Enter按键并且不消耗事件本身时,事件最终由对话框的默认按钮处理逻辑处理,这导致单击前面提到的"button of choice" .

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

    另请查看this thread on the Qt project forums,它似乎以不同的方式解决了同样的问题 .

相关问题