我发现在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;
}
}
答案 0 :(得分:0)