Qt程序子窗口全屏时只能显示到主屏幕,子窗口全屏时父窗口依旧显示问题,任务栏缩略图显示错误,完美解决方案

Qt框架程序,全屏主窗口很简单,只需要调用主窗口对象的showFullScreen函数就可以了。

子窗口想要全屏的话,稍微复杂一些。因为Qt文档中明确表示,showFullScreen只对调用isWindow()返回true,的窗口生效。

所以,全屏时需要将子窗口变为独立窗口。

ui.frame->setWindowFlag(Qt::Window, true);
ui.frame->showFullScreen();

此时,会发现,当电脑连接多个屏幕时,全屏窗口始终显示在主屏幕上。解决方案如下,这样全屏窗口就显示在主窗口所在屏幕了。

ui.frame->windowHandle()->setScreen(screen());

窗口还原代码如下。

ui.frame->setWindowFlag(Qt::Window, false);
ui.frame->showNormal();

细心的同学会发现,全屏时,将鼠标放在任务栏的程序图标上,显示的缩略图是原主窗口隐藏全屏的子窗口后的图像。即,原主窗口仍然显示在桌面上的,只是被全屏的子窗口挡住了。可以调用window()->setVisible(false) 来隐藏主窗口,此时,任务栏上的程序图标会消失


下面,介绍另一种全屏方案,来避免上述问题。

ui.frame->setParent(nullptr);
ui.frame->move(screen()->geometry().topLeft()); //移动到主窗口所在屏幕
ui.frame->showFullScreen();

还原

ui.frame->showNormal();
ui.frame->setParent(this);
ui.windowLayout->insertWidget(1, ui.frame); //放回原布局中

这样,任务栏上会出现两个图标,且两个顶层窗口都会显示在桌面上。此时再调用window()->setVisible(false),隐藏原主窗口即可。完整代码

if (bFull)
{
   ui.frame->setParent(nullptr);
   ui.frame->move(screen()->geometry().topLeft());
   ui.frame->showFullScreen();
}
else
{
   ui.frame->showNormal();
   ui.frame->setParent(this);
   ui.windowLayout->insertWidget(1, ui.frame);
}
window()->setVisible(!bFull);

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值