Qt 4.6 и OpenGL: как захватывать нажатия клавиш с трех разных виджетов одновременно? - PullRequest
1 голос
/ 22 ноября 2010

Я создал форму в Qt Creator и добавил три пользовательских QWidget (все они одного класса с именем Renderer) в форму. Я хочу, чтобы все три виджета, кроме формы, получали уведомление, когда пользователь нажимает клавишу Alt, но в настоящий момент я даже не могу заставить один виджет работать.

Я добавил void keyPressEvent (QKeyEvent *) и void keyReleaseEvent (QKeyEvent *) в класс Renderer, но функции вообще не вызываются ... (точки останова не срабатывают) Функции нажатия клавиш защищены.

void Renderer::keyPressEvent(QKeyEvent *event) {
    switch(event->key()) {
    case Qt::Key_Alt: {
        isAltPressed = true;
        cout << "alt got pressed" << endl;
        break;
    }
    default:
        break;
    }
}

void Renderer::keyReleaseEvent(QKeyEvent *event) {
    switch(event->key()) {
    case Qt::Key_Alt: {
        isAltPressed = false;
        cout << "alt released" << endl;
        break;
    }
    default:
        break;
    }
}

Я что-то здесь упускаю?

Кроме того, есть ли что-то особенное, что я должен сделать, чтобы нажатия клавиш регистрировались всеми тремя виджетами одновременно?

Большое спасибо.

1 Ответ

3 голосов
/ 22 ноября 2010

Какой у тебя focusPolicy?События клавиатуры будут передаваться только виджету с фокусом (затем вы можете сами вызывать другие обработчики).

...