我发现 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;
}
}