2013-11-01 7 views
0

키가 Linux에서 실제로 해제 될 때까지 keyPress 이벤트가 실행되지 않습니다. 이 동작은 Vista마다 다릅니다. 여기 내 응용 프로그램의 코드가 있습니다. 1) CTRL 키를 아래로, 2) 잠시 3)를 해제 동안 유지 : 나는 다음과 같은 순서를 수행 할 때qt keyPress/keyRelease는 Vista 및 Linux에서 다르게 작업을 알립니다.

차이가 발생합니다.

Linux의 경우 release.i.e까지 아무 것도 출력되지 않습니다. 3)까지 아무 것도 보지 않을 것입니다. 그리고 나서 "notify :: KeyPressed"와 "notify :: KeyReleased"를 보게 될 것입니다.

Vista에서 1) 이후에 "notify :: KeyPressed"가 표시되면 2)에서 QApplication :: keyboardModifier()로 CTRL이 다운되었음을 감지 할 수 있습니다. testFlag (Qt :: ControlModifier) . 3) 이후에는 "notify :: KeyReleased"가 표시됩니다.

나는 비스타에서 무슨 일이 일어날 것이라고 생각합니다. 리눅스에서이 문제를 어떻게 해결할 수 있습니까?

도움 주셔서 감사합니다.

MyApplication::QApplication 
{ 
    bool notify(Object * receiver, QEvent * event) { 
     try{ 
      if (event->type() == QEvent::KeyPress) { 
       std::cout<<"notify::KeyPressed"<<endl; 
      } 

      if (event->type() == QEvent::KeyRelease) { 
       std::cout<<"notify::KeyReleased"<<endl; 
      } 


      return QApplication::notify(receiver, event); 
     } 
     catch (...) { 
      std::cerr << "Unknown Exception caught: " << ends; 

     } 
     return false; 

    } 
} 
+0

어떤 창 관리자와 어떤 Qt 버전을 사용하고 있습니까? –

+0

Qt 4.8.3을 사용하고 있습니다. RHEL Linux 5에서. – user1073719

+0

그리고 어떤 창 관리자/데스크탑 환경? –

답변

0

마지막으로 문제가 발견되었습니다. 블레이드에서 실행되는 가상 머신을 사용하고 있습니다. 클라이언트 도구 인 블레이드에 연결하면 기본적으로 "Send First Key"옵션이 비활성화되어 있으므로 가상 시스템에 연결되어있을 때 Ctrl 키를 누를 때 (첫 번째 키가 비활성화됨을 기억하십시오), 당신은 "keyPress"이벤트를 얻지 못한다! 활성화 한 후에는 예상대로 작동하기 시작합니다.