上节总结了usb摄像头在label上的显示问题,今天我们想要实现的是在label控件上双击实现全屏的画面显示,再次双击退出全屏。
本次实现的基本原理是利用事件过滤器eventFilter。直接贴代码
首先需要在构造函数中为label安装事件过滤器
ui.u1->installEventFilter(this);
当然重写事件过滤器需要在头文件中声明,下面为重写的事件过滤器部分。
bool QtGuiApplication7::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui.u1)//当事件发生在u1(为Qlabel型)控件上
{
if (event->type() == QEvent::MouseButtonPress)//当为双击事件时
{
i++;
if (i % 2 == 0) //此处为双击一次全屏,再双击一次退出
{
ui.u1->setWindowFlags(Qt::Dialog);
ui.u1->showFullScreen();//全屏显示
}
else
{
ui.u1->setWindowFlags(Qt::SubWindow);
ui.u1->showNormal();//退出全屏
};
}
return QObject::eventFilter(obj, event);
}
}
摄像头显示部分就不再贴出了,主要还是定时器的使用,下面放出两张结果图:
初始情况下:
在label中双击全屏显示
总结:当我们需要对某一个控件响应鼠标或者键盘事件的时候可以充分发挥事件过滤器的作用!