QT 子窗口全屏化和退出全屏的功能实现

初始的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);
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值