今天遇到一个小的问题,使用QT,通过点击鼠标,使一个窗口的全屏化,再次点击恢复。
没用过滤器之前出现了一个,全屏之后,无法恢复原来大小的BUG。
分析:鼠标点击触发之后,第一次使用可行,但将QWidget置于最上层,后续将无法触发。
过滤器代码:
头文件中的声明描述
bool eventFilter(QObject *, QEvent *); //事件过滤器
源文件中
bool MfcToQt::eventFilter(QObject *obj, QEvent *ev)
{
if (obj == &mPlayWidget1 && ev->type() == QEvent::MouseButtonDblClick) /*鼠标进入标签*/
{
i++;
if (i % 2 == 1)
{
mPlayWidget1.setWindowFlags(Qt::Window);
mPlayWidget1.showFullScreen();
}
else
{
mPlayWidget1.setWindowFlags(Qt::SubWindow);
mPlayWidget1.showNormal();
}
}
return QWidget::eventFilter(obj, ev);
}
代码中 mPlayWidget1 是我用来播放的控件,页面中的控件想要全屏,需要先setWindowFlags(QT::Window)
同样,恢复也要使用一个setWindowFlags(QT::SubWindow)
变量i 是一个笨办法,多余设置了一个全局变量,用于记录判断是不是全屏。
最后在初始函数中,给控件添加标签
mPlayWidget1.installEventFilter(this);