【问题标题】:How to disable rendering in QML WebView?如何在 QML WebView 中禁用渲染?
【发布时间】:2015-08-08 16:44:57
【问题描述】:

我目前正在构建一个使用 QML WebView (import QtWebKit 3.0) 的应用程序。用户需要经常调整WebView 的大小(我使用的是QML SplitView),但是这会导致每当调整应用程序窗口大小时UI 都会极度滞后。有什么办法可以防止这种情况发生吗?

【问题讨论】:

  • 您可能需要对其进行分析并查看时间花在了哪里。
  • @KubaOber 我这样做了,并且帧速率下降恰好发生在我调整 SplitView 的大小(改变 WebView 的宽度)时,它的 updateLayout() 和 moveHandle() 函数被触发。跨度>

标签: qt webview qml qtquick2 qtwebkit


【解决方案1】:

不是更改widthheight 属性,而是更改WebViewscale 属性。

  • 在调整大小开始时保存widthheight 的初始值。
  • 在调整大小时不要更改 widthheight。而是在调整大小开始时将 scale 设置为 newWidth 除以宽度。
  • 当调整大小结束时,将widthheight 的新值设置为这些属性并将scale 设置为1。

编辑: 由于您无法控制widthheight 属性,您可以将WebView 替换为Rectangle,并将颜色设置为"transparent"。然后您可以将WebView 放在Rectangle 上,然后观察Rectanglewidthheight 的变化情况。

现在有两件事。

如果您不知道调整大小何时开始以及何时结束,请使用Timer,间隔为例如 100 毫秒。每次widthheightRectangle 更改时,重新启动Timer 并更新scale。当Timer 被触发时,设置真实的widthheight

如果 Rectangle 的 widthheight 的比例不是恒定的,则使用 QML 对象 Scale。有了它,您可以独立更改xScaleyScale

【讨论】:

  • 这是个好主意。但是,由于我说我使用的是 SplitView,所以我无法控制 height 和 width 属性。
  • @daljit97 我认为更改scale 或使用Scale 对象就足够了。有关更多信息,请参阅我编辑的答案。如果您仍然不满意,请提供您希望在没有延迟的情况下工作的简单代码示例。
  • 我遵循了您的方法并且它有效,但是 WebView 在缩放时变得不可见。不过比以前好多了,谢谢。
  • @daljit97 奇怪。它可能看起来不自然地被拉伸,但它不应该是隐形的。
  • @daljit97 你当然可以完全控制属性,你只需要在容器和视图之间插入一些你自己的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2012-02-07
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多