qt keyPress / key释放在Vista和Linux上以不同方式通知工作

时间:2013-11-01 15:53:40

标签: linux qt keypress keyrelease

我发现在Linux上实际发布密钥之前,keyPress事件永远不会被触发。此行为在vista上有所不同。这是我的应用程序中的一段代码。

当我按以下顺序执行时会出现差异: 1)按住CTRL键, 2)握住它一会儿 3)释放它。

在Linux上,在发布之前没有任何内容打印出来。直到3)你才会看到任何东西,然后你会看到“notify :: KeyPressed”和“notify :: KeyReleased”。

在Vista上,在1)之后,您将看到“notify :: KeyPressed”,然后在2)中,您可以使用QApplication :: keyboardModifier()。testFlag(Qt :: ControlModifier)检测到CTRL已关闭。然后在3)之后,你会看到“notify :: KeyReleased”。

我认为vista上发生的事情是我的预期。我如何解决Linux上的问题以及为什么会这样?

感谢您的帮助!

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;

    }
}

1 个答案:

答案 0 :(得分:0)

终于找到了问题。我正在使用在刀片上运行的虚拟机。当您连接刀片时,客户端工具有一个选项:“发送第一个密钥”,默认情况下,它被禁用,因此当连接到虚拟机时,当您按下CTRL时,(记住第一个密钥被禁用),你没有得到“keyPress”活动!启用后,它开始按预期工作!