[英]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
。
小部件必须最初调用
setFocusPolicy()
以接受焦点并具有焦点以便接收按键事件。
所以你应该这样做。 (因为你没有展示你的构造函数,我猜你错过了那个部分。)
之后的行说:
如果重新实现此处理程序,则在不对键执行操作时调用基类实现非常重要。
您在窗口小部件中丢失了它,但在主窗口中执行此操作。 确保你在两个地方都这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.