Qt Key Pressevent Enter

时间:2014-09-03 05:55:25

标签: qt keypress qkeyevent

void LoginModle::keyPressEvent(QKeyEvent *event)
{
    qDebug() << event->key() << "\t" << Qt::Key_Enter << "\t" << QKeyEvent::Enter;
    if( event->key() == Qt::Key_Enter)
        OKButtonClicked();
    else
        QDialog::keyPressEvent(event);
}

此代码非常简单,类LoginModle继承自QWidget。运行此代码,当我按 Enter 时,它显示:

16777220     16777221    10

这意味着键盘中的 Enter 16777220,但在Qt中,它被定义为16777221

我的系统是Elementary OS(Freya),它基于Ubuntu 14.04。

我的司机有什么问题,或者只是程序的错误?

3 个答案:

答案 0 :(得分:7)

Qt::Key_Enter引用的Enter键是数字键盘上的Enter键。您按下键盘上字母旁边的“Enter”键。这被称为Return键,其值由Qt::Key_Return表示,等于16777220。

因此,为了支持两次按键操作,您可以按如下方式修改if语句:

if( (event->key() == Qt::Key_Enter) || (event->key() == Qt::Key_Return))
        OKButtonClicked();
    else
        QDialog::keyPressEvent(event);

答案 1 :(得分:4)

16777220(dec)= 1000004(十六进制),因此根据this list,按下的键是&#34;返回&#34;。查看Wiki - 输入键位于数字键盘中,您使用的键在Qt&#34;返回键&#34;中调用。

答案 2 :(得分:1)

这只是carriage return(CR)和line feed(LF)的问题。 CR编码为13(十六进制为0D),表示为&#39; \ r&#39;在C和C ++中;并且LF编码为10(十六进制为0A),表示为&#39; \ n&#39;在C和C ++中。 Qt::Key_Enter代表CR,而Qt::Key_Return代表LF。当您按键盘上的Enter键时,程序可能实际上接收LF而不是CR。您可以通过getchar()功能进行测试 - 按Enter键,但会返回10.因此,您应该阅读Qt::Key_Return事件,而不是Qt::Key_Enter事件

如果您真的,非常关心原因,请查看typewriter的历史记录,因为CR和LF代表两个不同的操作打字机。