释放内存时,qt窗口会黑屏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了释放内存时,qt窗口会黑屏相关的知识,希望对你有一定的参考价值。
参考技术A 保证so库是否链接正确。程序链接了so库,则保证so库是否链接正确,如果链接不正确比如头文件不一致等,就会有黑屏问题。在全屏模式下运行 Qt 应用程序时出现“黑屏”问题
【中文标题】在全屏模式下运行 Qt 应用程序时出现“黑屏”问题【英文标题】:Issue with "blanking screen" when running Qt application in fullscreen mode 【发布时间】:2020-03-25 18:12:25 【问题描述】:我们有一个基于 Qt 的浏览器应用程序,它在后台使用 QWebEninge。目前,我们正在解决一个问题,即每次窗口获得或失去焦点时(例如,每次调用 QVirtualKeyboard 时),屏幕都会出现片刻空白。在Qt's recommendation 之后,我们尝试在调用QMainWindow::showFullScreen()
之前实现QWindowsWindowFunctions::setHasBorderInFullScreen
。但这会导致可用窗口面积的减少令人无法接受,例如1918x1078 而不是 1920x1080(此修复将 WS_BORDER 添加到窗口标志)。
在一些实验中,如果我使用QMainWindow::show()
并以与屏幕分辨率完全匹配的方式设置窗口大小时,如果发现问题也 - 并且仅 - 出现。换句话说:超出屏幕范围不是问题。因此,我的想法是在我的 QMainWinow 周围放置这样一个 WS_BORDER
并以某种方式调整/放置它,以便可用区域覆盖屏幕。
我的问题是:
有没有更好的解决方案来解决这个问题? 如果不是:我怎样才能获得“正常”QMainWinodw
的WS_BORDER
?我尝试在调用QMainWinodw::show()
之前和之后都使用Get/SetWindowLongPtr(QMainWindow::winId(), GWL_STYLE/GWL_EXSTYLE)
,但这没有帮助。
提前致谢。
【问题讨论】:
注意:我已经注意到图形驱动程序在这里起着重要作用。范围内的系统具有 Intel HD Graphics 5xx GPU,驱动程序是最新的。在另一台配备 Intel HD Graphics 6xx GPU 的计算机上也发生了同样的情况。将 Windows 设置中的“高级图形设置”更改为“高性能”也无济于事。 【参考方案1】:作为一种解决方法,我尝试使用 Qt::WindowStaysOnTopHint 放置一个隐藏的(不透明的)迷你窗口(0x0px) - 这很有效。如果有人知道更好的解决方案,请告诉我们。谢谢。
编辑 这是一个意外发现:Windows 的放大镜工具由于某种原因处于活动状态,我注意到当放大镜位于我的应用程序 Windows 前面时,问题不会发生。作为结论,我尝试放置一个“始终位于顶部”的窗口,并且可以看到它有效。最后我想隐藏这个“叠加层”,这是通过将它的宽度/高度设置为 0px/0px 来完成的。 但是,似乎存在一些关于 Qt 和范围内系统的英特尔高清显卡适配器的一般问题。据我记得,只有当(全屏)窗口的大小与显示器的几何形状相匹配时才会出现问题 - 至少将其大小调整为超出显示器几何形状的像素会有所帮助,但在我们的案例中这是没有选择的。
【讨论】:
您能否详细说明您的解决方案? @JoanVenge:编辑回答了你的问题吗? 我之前没有看到你的编辑。我刚读过它,所以您必须将全屏窗口的大小再调整 1 个像素?我遇到的问题也与英特尔驱动程序有关,我无法解决此问题。 是的,使用超出屏幕边界至少 1 像素的无框 Windows 是一种可能的解决方案。另一种方法是像以前一样使主窗口全屏显示,并在前面放置第二个使用 AlwaysOnTopHint 的“迷你窗口”。但是 - 正如提案中所述 - 这更像是一种解决方法而不是解决方案。以上是关于释放内存时,qt窗口会黑屏的主要内容,如果未能解决你的问题,请参考以下文章