Всегда иметь политику фокуса на скрытый виджет? (Qt C ++)

Я учусь обрабатывать события нажатия клавиш и отпускания клавиш в 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, это будет очень полезно!

Спасибо,

Джон

4

Решение

Для тех, кто хочет знать, я нашел ответ на свой вопрос.

В конструкторе для класса, который обрабатывает мои события клавиатуры, я добавил эту строку:

QWidget::grabKeyboard();

и теперь весь ввод с клавиатуры, когда это приложение активно, идет прямо к этому виджету.
Вы можете проверить ссылку для получения дополнительной информации:
QWidget :: GrabKeyboard.

Примечание: ничто иное (т.е. никаких других виджетов) не получит ввод с клавиатуры, пока вы не вызовете QWidget::releaseKeyboard(),

6

Другие решения


По вопросам рекламы [email protected]