Qt笔记-解决键盘事件不能正常响应(其他响应事件通用)

x33g5p2x  于2021-11-23 转载在 其他  
字(0.5k)|赞(0)|评价(0)|浏览(640)

比如在主Widget中写了KeyPressEvent却发现部分按键不能响应,或者全部都不能响应。

造成这个原因是因为,响应事件被其他控件劫持了(Qt中有些控件自带劫持,响应某些按键)。

解决方法:

找到这个控件,再把信号转发出去就可以了或者忽略此信号,这样父类就可能会获取到。

如下面这个例子:

主界面的是QWidget,里面放了一个QGraphicsView。

当我重写QWidget的KeyPress事件后,发现小键盘 上下左右,不能拿到,发现是QGaphicsView劫持了。

因为QGraphicView的父类是QWidget,所以这么做就能转发出去了。

void ChessBoardView::keyPressEvent(QKeyEvent *keyEvent)
{
    parent()->event((QEvent *)keyEvent);
}

其他的也是一样的。

或者将Event设置为ignore()

如下代码:

void ChessBoardView::keyPressEvent(QKeyEvent *keyEvent)
{
//    parent()->event((QEvent *)keyEvent);
    keyEvent->accept();
}

相关文章