Qt 子窗口(控件)如何全屏显示和退出全屏显示

首先感谢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);

猜你喜欢

转载自blog.csdn.net/weixin_42518229/article/details/105474714
今日推荐