我发现在Linux上真正释放密钥之前,不会触发keyPress事件。这种行为在视野上是不同的。下面是我的应用程序中的一段代码。
当我执行以下顺序时,这种差异就会发生: 1)按下CTRL键,2)将其保存一段时间,3)释放它。
在Linux上,只有发行版才能打印出来。直到3)你才能看到任何东西,然后你会看到“通知::键释放”和“通知::密钥释放”。
在Vista上,在1)之后,您将看到"notify::KeyPressed",然后在2)中,您可以检测到CTRL与QApplication::keyboardModifier().testFlag(Qt::ControlModifier).一起关闭。然后,你会看到“通知::键释放”。
我想发生在远景上的事情正是我所期望的。我如何在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;
}
}发布于 2013-11-04 17:03:41
终于发现了问题。我用的是运行在刀片上的虚拟机。当您连接到刀片,客户端工具,有一个选项:“发送第一个键”,默认情况下,它是禁用的,所以当连接到虚拟机时,当您按下CTRL,(记住第一个键是禁用的),您不会得到"keyPress“事件!在我启用它之后,它就开始像预期的那样工作!
https://stackoverflow.com/questions/19730352
复制相似问题