qt keyPress/keyRelease notify 在 Vista 和 Linux 上的工作方式不同



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

当我执行以下顺序时,就会发生差异:1) 按 CTRL 键向下,2)保持一会儿3)释放它。

Linux上,在发布之前不会打印任何内容,即直到3,您才会看到任何内容),然后您会看到"notify::KeyPressed"和"notify::KeyRelease"。

在Vista上,在1)之后,你会看到"notify::KeyPressed",然后在2)中,你可以检测到CTRL与QApplication::keyboardModifier().testFlag(Qt::ControlModifier)关闭。然后在 3) 之后,您将看到"通知::密钥发布"。

我认为在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;
    }
}

终于找到了问题所在。我正在使用在刀片上运行的虚拟机。连接到边栏选项卡时,客户端工具有一个选项:"发送第一个密钥",默认情况下,它是禁用的,因此当连接到虚拟机时,当您按 CTRL 时(请记住第一个键已禁用),你不会收到"按键"事件!启用它后,它开始按预期工作!

最新更新