Qt按键事件输入


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

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

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

我的驱动程序有问题还是程序的错误?

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);

16777220(dec( = 1000004(hex(,所以根据这个列表,按下的键是"返回"。查看 Wiki - Enter 键在数字键盘中,您使用的键在 Qt 中称为"返回键"。

这只是

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

如果您真的非常关心原因,请检查打字机的历史,因为 CR 和 LF 代表打字机中的两种不同操作。

相关内容

  • 没有找到相关文章

最新更新