初始的UI如下图;
现在只做了三个功能键:全屏、退出全屏、播放。
下面看代码:
三个信号与槽控制对应上面三个功能
QObject::connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(display_main())); //播放
QObject::connect(ui->fullsrceen,SIGNAL(clicked()),this,SLOT(fullscreen())); //全屏
QObject::connect(ui->halfsrceen,SIGNAL(clicked()),this,SLOT(halfscreen())); //退出全屏
全屏化(QT 通过QApplication::desktop()类来获取桌面屏幕的大小):
void ffmpeg_play::fullscreen()
{
//获取桌面屏幕大小
QDesktopWidget *system_screen=QApplication::desktop();
QRect desktop_screen = system_screen->screenGeometry();
ui->label->setWindowFlags(Qt::Dialog);//该函数表示将窗口设为顶层窗口,因为函数showFullScreen只对顶级窗口有效,原始的顶级窗口是this
//setWindowFlags (Qt::Dialog| Qt::FramelessWindowHint);第一个参数表示此控件是窗口类型,第二个表示去除边框、状态栏等,不加就表示保留这些
ui->label->setFixedSize(desktop_screen.width(),desktop_screen.height()); //将label设置为可用桌面的大小
ui->label->showFullScreen(); //全屏显示函数
}
退出全屏化:
void ffmpeg_play::halfscreen()
{
ui->label->setWindowFlags(Qt::SubWindow);
//子窗口设置为非顶级窗口,再调用showNormal()还原子窗口,即退出全屏化
ui->label->setFixedSize(640,480); //将播放窗口label恢复我原始设定的大小
ui->label->showNormal(); //该函数就是退出全屏,还原成原来的状态
}
注意先调用setWindowFlags(Qt::Dialog)函数将子窗口设为顶级窗口,再调用全屏化函数。
退出全屏时先调用setWindowFlags(Qt::SubWindow)函数设为非顶级窗口,再调用showNormal退出全屏。
二者函数的顺序不可颠倒!
如果是电脑这种应用场景,可以通过捕捉键盘按键Esc和鼠标来响应退出动作。
下面是通过捕捉Esc键来退出。
void ffmpeg_play::keyPressEvent(QKeyEvent *event)
{
//捕捉事件
switch (event->key()) {
//判断ESC按键事件
case Qt::Key_Escape:
ui->label->setWindowFlags(Qt::SubWindow);
ui->label->setFixedSize(640,480);
ui->label->showNormal();
break;
default:
break;
}
}
下面看看全屏的效果:
与上面的那张图对比,可以发现,桌面全部被占用了。
可以看到播放器窗口的上面是有状态栏的,一般的播放器全屏后,是不应该有其它东西的。
如果不想要状态栏,调整setWindowFlags ()函数的参数就行了。如下:
setWindowFlags (Qt::Dialog) --> setWindowFlags (Qt::Dialog| Qt::FramelessWindowHint);