QT 项目从 5.3.2 升级到 5.14.2,在项目中使用 QWebEngineView 代替 QWebView 后,网页加载滞后。
项目升级,软件内需要使用QWebEngineView来显示网页,但发现加载的网页渲染很慢(7、8秒以上才渲染出来),而且网页渲染完成后,点击和滚动页面都非常卡顿。
起初认为是自定义设置了网页页面用户代理的问题,也考虑过是不是设置cookie_jar引起的问题,或者设置QWebEngineView某些属性导致的问题,但验证后都不是这些问题。
然后,本人单独创建了一个QWebEngineView程序,页面渲染和交互都很流畅。
最后发现应用程序输出错误如下:
UpdateLayeredWindowIndirect failed for ptDst=(439, 170), size=(1042x700), dirty=(1072x730 -15, -15) (参数错误。)
UpdateLayeredWindowIndirect failed for ptDst=(439, 170), size=(1042x700), dirty=(1072x730 -15, -15) (参数错误。)
UpdateLayeredWindowIndirect failed for ptDst=(439, 170), size=(1042x700), dirty=(1072x730 -15, -15) (参数错误。)
UpdateLayeredWindowIndirect failed for ptDst=(439, 170), size=(1042x700), dirty=(1072x730 -15, -15) (参数错误。)
Progress: 0
UpdateLayeredWindowIndirect failed for ptDst=(1245, 218), size=(198x259), dirty=(214x275 -8, -8) (参数错误。)
出现这个错误的原因是因为我的QWebEngineView的最顶层父对象设置了无边框,所以最顶层父对象需要重新绘制,这也就导致了它的子代对象也要重新绘制。
但是QWebEngineView的绘制有问题,也就造成了卡顿。
这里也感谢QWebEngineView出现"UpdateLayeredWindowIndirect failed for ptDst="的错误 - 开发者知识库 (itdaan.com)的提示。