Qt 4.6 и OpenGL: как фиксировать нажатия клавиш тремя разными виджетами одновременно?

Я создал форму в 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;
    }
}

Я что-то упустил здесь?

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

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


person confusedKid    schedule 22.11.2010    source источник
comment
Ответил. Что касается второй части вопроса, я решил проблему, сделав isAltPressed переменной класса вместо частной переменной-члена.   -  person confusedKid    schedule 25.11.2010


Ответы (1)


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

person Ben Voigt    schedule 22.11.2010
comment
Я раньше не работал с focusPolicy и, честно говоря, даже не слышал о нем (для Qt) до сих пор... не могли бы вы дать мне ссылку, чтобы узнать об этом больше? - person confusedKid; 22.11.2010
comment
Ссылка добавлена. У меня очень мало опыта работы с Qt, но это правило о том, что события нажатия клавиш переходят в окно с фокусом, в значительной степени универсально. Когда я увидел, что политика по умолчанию не имеет фокуса, я подумал, что стоит предложить вам перепроверить. - person Ben Voigt; 22.11.2010