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。
我的司机有什么问题,或者只是程序的错误?
答案 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代表两个不同的操作打字机。