Я учусь обрабатывать события нажатия клавиш и отпускания клавиш в Qt (C ++). У меня есть класс Keyboard, с помощью которого я хочу обработать все эти события. Он наследует QObject. Не нужно обрабатывать события мыши. Я пытаюсь выяснить, как я могу направить весь ввод с клавиатуры, когда мое приложение открыто для этого класса.
Я попытался добавить его в качестве виджета в макет моего класса MainWindow и скрыть его (виджет, а не макет). В настоящее время это не отвечает.
Я также попробовал это в моем классе MainWindow:
void MainWindow::keyPressEvent(QKeyEvent *event)
{
keys->keyPressEvent(event);
//Keys is a Keyboard object with this public method:
//void keyPressEvent(QKeyEvent *event);
}
Но это тоже не работает. В моем конструкторе Keyboard :: Keyboard () у меня есть:
this->setFocusPolicy(Qt::StrongFocus);
Я не уверен, что мне нужно что-то еще сделать, чтобы обеспечить ввод с клавиатуры.
Если кто-то знает способ отправки всех событий клавиатуры в этот класс для моего приложения Qt, это будет очень полезно!
Спасибо,
Джон
Для тех, кто хочет знать, я нашел ответ на свой вопрос.
В конструкторе для класса, который обрабатывает мои события клавиатуры, я добавил эту строку:
QWidget::grabKeyboard();
и теперь весь ввод с клавиатуры, когда это приложение активно, идет прямо к этому виджету.
Вы можете проверить ссылку для получения дополнительной информации:
QWidget :: GrabKeyboard.
Примечание: ничто иное (т.е. никаких других виджетов) не получит ввод с клавиатуры, пока вы не вызовете QWidget::releaseKeyboard()
,