QWidget QLabel没有响应keyEvent键盘事件

Posted ningto.com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QWidget QLabel没有响应keyEvent键盘事件相关的知识,希望对你有一定的参考价值。

在Qt中我们经常通过重写下面两种虚函数来实现按键事件

virtual void keyPressEvent(QKeyEvent *event);
bool eventFilter(QObject* watched, QEvent* event);

但是有时候会遇到无法触发的情况(特别是QWidget,QLabel),这个时候我们会考虑是不是被父窗口给截获了没有传递给子窗口。

如果依旧没有解决问题,那可能是这个widget没有焦点的缘故,通常可以通过鼠标点击和tab键可以获取焦点,但是像QWidget、QLabel即使你鼠标点上去了它也不会有焦点的,所以它触发不了键盘事件,你应该给它设置一个焦点获取的策略,而不应该是Qt::NoFocus,如下代码接收tab和click焦点。

setFocusPolicy(Qt::StrongFocus);

只有获取了焦点才能响应按键事件

以上是关于QWidget QLabel没有响应keyEvent键盘事件的主要内容,如果未能解决你的问题,请参考以下文章

QWidget 不显示 QLabel

QWidget.paintevent() 与 QLabel.setPixmap()

为啥带有边框和背景图像样式的 QWidget 的行为与 QLabel、QDialog、...不同?

带有像素图的透明 QLabel

CSS 样式表不适用于自定义 QWidget

在为隐藏的 QWidget 调用 show() 之后移动 QLabel [关闭]