qt keyPress/keyRelease notify по-разному работает в Vista и Linux
Я обнаружил, что событие keyPress никогда не запускается, пока ключ не будет выпущен в Linux . Это поведение отличается от перспективы. Вот кусок кода из моего приложения.
Разница возникает, когда я выполняю следующую последовательность: 1) удерживайте клавишу CTRL, 2) удерживайте ее 3) отпустите.
В Linux ничего не распечатывается до release.ie вы ничего не увидите до 3), затем вы видите "notify::KeyPressed" и "notify::KeyReleased".
В Vista, после 1), вы увидите "notify::KeyPressed", затем в 2), вы можете обнаружить, что CTRL не работает с помощью QApplication::keyboardModifier(). TestFlag(Qt::ControlModifier). затем через 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;
}
}
1 ответ
Наконец-то нашел проблему. Я использую виртуальную машину, работающую на блейде. Когда вы подключаетесь к блейду, инструмент клиента имеет опцию: "Отправить первый ключ", по умолчанию он отключен, поэтому при подключении к виртуальной машине, когда вы нажали CTRL, (помните, что первый ключ отключен), Вы не получаете событие "keyPress"! После того, как я включил это, он начинает работать как ожидалось!