0

我发现 keyPress 事件在 Linux 上实际释放密钥之前永远不会触发。这种行为在 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;

    }
}
4

1 回答 1

0

终于发现问题了。我正在使用在刀片上运行的虚拟机。当你连接到刀片时,客户端工具,有一个选项:“Send First Key”,默认情况下是禁用的,所以当连接到虚拟机时,当你按下CTRL时,(记住第一个键是禁用的),你没有得到“keyPress”事件!在我启用它之后,它开始按预期工作!

于 2013-11-04T17:03:41.493 回答