Tôi có một lớp được thừa kế QWidget như vậy:Qt đáp ứng với keyPressEvent trong con 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();
}
}
Sau đó, tôi có lớp main_window tôi:
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);
}
Câu hỏi của tôi là, làm thế nào để tôi có được keyPressEvent
trong tiện ích tetris_canvas
của tôi để phản hồi một lần nhấn phím?
Tôi đang vẽ bên trong canvas đó và tôi cần trả lời các lần nhấn phím để người dùng có thể tương tác với mọi thứ trên canvas đó.
Tiện ích được thêm vào số QGridLayout
trong ctor hoặc lớp main_window
của tôi.