【发布时间】:2013-11-12 20:46:43
【问题描述】:
我发现 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;
}
}
【问题讨论】:
-
不能复现,你用的是哪个窗口管理器和哪个Qt版本?
-
我使用的是 Qt 4.8.3。在 RHEL Linux 5 上。
-
还有哪个窗口管理器/桌面环境?
-
我在刀片上运行的虚拟机中使用 GNome 2.16.0。
-
用 xev 测试过,我遇到了同样的问题。貌似是xwindow的问题,不知道怎么解决这个问题。非常感谢!
标签: linux qt keypress keyrelease