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"! После того, как я включил это, он начинает работать как ожидалось!

Другие вопросы по тегам