Qt отвечает на keyPressEvent в дочернем QWidget

У меня есть класс, производный от QWidget, как таковой:

class tetris_canvas : public QWidget
{
    Q_OBJECT

public:
    tetris_canvas(QWidget * parent = 0);
    ~tetris_canvas();

protected:
    void paintEvent(QPaintEvent *event);
    void keyPressEvent(QKeyEvent *event);
};

//Never hits this keyPressEvent!!!
void tetris_canvas::keyPressEvent(QKeyEvent * event)
{
    if (event->key() == Qt::Key_Down)
    {
        rect->moveBottom(20);
        update();
    }
}

Затем у меня есть класс main_window:

class main_window : public QWidget
{
    Q_OBJECT

public:
    main_window(QWidget* parent = 0, Qt::WFlags flags = 0);
    ~main_window();

protected:
    void keyPressEvent(QKeyEvent * event);
};

//This keyPressEvent is hit!
void main_window::keyPressEvent(QKeyEvent* event)
{
    if (event->key() == Qt::Key_Escape)
    {
        QApplication::exit(0);
    }
    QWidget::keyPressEvent(event);
}

Мой вопрос: как мне получить keyPressEvent в мой виджет tetris_canvas для ответа на нажатие клавиши?

Я рисую внутри этого холста, и мне нужно реагировать на нажатия клавиш, чтобы пользователь мог взаимодействовать с объектами на этом холсте.

Виджет добавлен в QGridLayout в классе ctor или в моем классе main_window .

7
задан Tony The Lion 24 October 2011 в 17:27
поделиться