首先感谢CSDN的“望那伊人”博主,他在https://blog.csdn.net/u012611644/article/details/90671364写得已经很清楚很明了了,我主要说明QLabel子窗口在全屏显示模式下按键事件不能接收的解决方法。
QLabel是不能直接发送像鼠标单击、双击等信号的,因为它并没有这些信号
解决方法:
1、覆写虚函数bool eventFilter(QObject obj, QEvent event);
2、注册事件过滤器
注:不注册事件过滤器,在子窗口全屏后就不可以接收事件
示例代码:
1、覆写虚函数
//
class MyClassName : public QWidget
{
Q_OBJECT
public:
explicit MyClassName(QWidget *parent = nullptr);
protected:
//覆写虚函数bool eventFilter(QObject *obj, QEvent *event)
bool eventFilter(QObject *obj, QEvent *event);
public:
QLabel *movieLabel;
};
/*********************函数实现***********************/
bool MyClassName::eventFilter(QObject *obj, QEvent *event)
{
//QEvent::MouseButtonDblClick 表示鼠标双击事件,判断是否为双击鼠标
if (event->type() == QEvent::MouseButtonDblClick) {
/*
your code
*/
return true; //事件不需要往下级传递,则返回真,表示已接收事件
} else {
// standard event processing
return QObject::eventFilter(obj, event); //事件往下传递
}
}
2、注册事件过滤器(以QLabel为例子)
//this 指的是MyClassName这个类的对象
QLabel movieLabel = new QLabel(this);
//注册事件过滤器,注册后就可以检测到在movieLabel双击时的事件了
movieLabel->installEventFilter(this);