2014-10-15 1 views
1

이 주제와 비슷한 주제가 몇 개 있었지만 정확히 같은 질문을하지 않고 답변이 필요하지 않다는 것을 알고 있습니다. 나는 나의 상황을 간략하게 설명하려고 노력할 것이다.eventfilter (embedded linux)를 사용하여 2 개의 키보드 키 스트로크를 구별

두 개의 키보드가 있습니다. 하나는 표준 USB 키보드 (HID)이고 다른 하나는 GPIO 키보드입니다. 두 키보드 모두에서 일반적으로보고되는 키가 있지만 키를 눌렀던 키보드에 따라 Qt 애플리케이션에서 다른 작업을 수행해야합니다.

현재 두 키보드가 동시에 잘 작동하지만 키보드를 눌렀을 때 나타나는 키를 식별 할 수있는 방법을 찾을 수 없습니다.

이것도 가능합니까? 저는 Qt 4.8.5를 사용하고 있으며 필요한 것을 성취하기 위해 필요할 경우에 대비하여 다시 컴파일 할 수 있습니다.

도움말, 팁, 팁을 높이 평가하겠습니다.

누를되는 키보드를 감지하는이 기능이없는, 도움을 위해

윌리엄

답변

0

Qt는 감사합니다. Linux 이벤트 인터페이스를 사용하여 두 입력을 구별해야합니다. 하드웨어 중 하나에서 일부 입력을 사용할 수있는 경우 /dev/input/ 디렉토리 아래에있는 문자 장치를 읽어서 액세스 할 수 있습니다. 예를 들어, 아마도 /dev/input/by-id/usb-0b38_0010-event-kbd과 같은 파일을 읽을 수 있으며 특정 키보드의 입력을 볼 수 있습니다.

두 개의 개별 스레드에서 두 개의 키보드에 대한 특정 파일을 읽을 수 있으며 그 중 하나에서 새 데이터를 읽을 때마다 입력이 키보드의 입력임을 알리는 신호를 주 스레드로 보냅니다. 루트 액세스 권한이 있어야

QFile file("/dev/input/by-id/FileForKeyboard2"); 

if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
    QTextStream stream(&file); 
    while(true) 
    { 
     stream.read(1); 
     emit keyBoard2_Pressed(); 
    } 
} 

참고가이 F에서 읽을 수 : 두 번째 스레드에서

QFile file("/dev/input/by-id/FileForKeyboard1"); 

if(file.open(QIODevice::ReadOnly | QIODevice::Text)) 
{ 
    QTextStream stream(&file); 
    while(true) 
    { 
     stream.read(1); 
     emit keyBoard1_Pressed(); 
    } 
} 

: 첫 번째 스레드에서

iles.

관련 문제