2014-09-03 2 views
2
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); 
} 

이 코드는 매우 간단합니다. LoginModleQWidget을 상속합니다. 이 코드를 실행하고 나는 입력을 누르면, 그것은 보여줍니다Qt 키 사전 입력

16777220  16777221 10 

그것은 내 키보드에서16777220하지만, Qt를에, 그것은 16777221로 정의 된 입력 것을 의미한다.

내 시스템은 우분투 14.04를 기반으로 한 Elementary OS (Freya)입니다.

드라이버에 문제가 있거나 프로그램의 실수가 있습니까?

답변

4

16777220 (dec) = 1000004 (hex)이므로 this list에 따르면, 누른 키는 "Return"입니다. Wiki을보십시오 - Enter 키가 숫자 키패드에 있습니다. Qt "Return key"에서 당신이 사용하는 키가 호출됩니다.

+0

그래, 고마워. – Anudorannador

+0

하지만 16777220은 12 월이라고 생각합니다. 숫자, 1000004는 16 진수입니다. 번호 .;) – Anudorannador

+0

맞아, 나는 그 실수를 이미 고쳤다. ;) – trivelt

7

Qt::Key_Enter이 나타내는 Enter 키는 숫자 키패드의 Enter 키입니다. 키보드의 글자 옆에있는 "Enter"키를 누르십시오. 다음과 같이 그가 리턴 키로 알려진, 그 값이 모두 키 입력을 지원하기 위해, 16777220.

그래서 동일 Qt::Key_Return에 의해 표현된다, 당신은 if 문을 수정하는 것입니다 :

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

예, 답장을 보내 주셔서 감사합니다. :) – Anudorannador

1

에게 그것을 carriage return (CR)과 line feed (LF)의 문제 일뿐입니다. CR은 C 및 C++에서 '\ r'로 표시되는 13 (0D는 16 진수)로 인코딩됩니다. LF는 C 및 C++에서 '\ n'으로 표시되는 10 (0A는 16 진수)로 인코딩됩니다. Qt::Key_Enter은 CR을 나타내며 Qt::Key_Return은 LF를 나타냅니다. 키보드의 Enter 키를 누르면 프로그램이 CR 대신 사실상 LF를 수신 할 수 있습니다. getchar() 함수로 테스트 할 수 있습니다 (Enter 키를 누름). 결과적으로 Qt::Key_Enter 이벤트가 아닌 Qt::Key_Return 이벤트를 읽어야합니다. CR 및 LF는 타자기에서 두 다른 작업에 서 있기 때문에

당신이 정말로 하는 경우, 그 이유에 대해 정말주의,의 typewriter의 역사를 확인하시기 바랍니다.