簡體   English   中英

Qt響應子QWidget中的keyPressEvent

[英]Qt respond to keyPressEvent in child 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);
}

我的問題是,如何在我的tetris_canvas小部件中獲取keyPressEvent來響應按鍵?

我正在繪制畫布,我需要響應按鍵,以便用戶可以與畫布上的內容進行交互。

該小部件被添加到ctor或我的main_window類中的QGridLayout

QWidget::keyPressEvent說:

小部件必須最初調用setFocusPolicy()以接受焦點並具有焦點以便接收按鍵事件。

所以你應該這樣做。 (因為你沒有展示你的構造函數,我猜你錯過了那個部分。)

之后的行說:

如果重新實現此處理程序,則在不對鍵執行操作時調用基類實現非常重要。

您在窗口小部件中丟失了它,但在主窗口中執行此操作。 確保你在兩個地方都這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM