【问题标题】:Serious performance problems with Qt5 and X11Qt5 和 X11 的严重性能问题
【发布时间】:2015-05-01 04:10:34
【问题描述】:

我们将应用程序从 Qt3 移植到 Qt5。它在 Windows 下运行流畅,但在 Linux (X11) 下运行不畅。使用 Qt3,Windows 或 Linux 都没有问题。

在应用程序内部有一个大约 1000x800 像素的画布。一个简单的矢量图形被绘制到画布上。用户单击画布,按住鼠标按钮并移动鼠标。每次鼠标移动都会导致重新绘制。

我们记录了每个阶段的毫秒数:

MouseMove 事件处理开始:10581

调用更新或重绘(不区分哪一个)

处理生成的 Paint-Event:10583

涂装:10584

从更新/重绘返回:10687 (!)

我找不到任何原因导致 100 毫秒的延迟(在每个鼠标移动事件中!)

我需要帮助!

【问题讨论】:

  • 你的 Qt 图形系统是什么?如果是 raster,请将其更改为 opengl 并检查工件和性能问题。
  • "每次鼠标移动都会导致重新绘制。"为什么?这是设计使然吗?
  • 每只鼠标都会根据设计导致重绘。这不是 Qt3 的问题。只涉及几百或几千个向量(带有Qt3的Rhasberry Pi(464 bogomips)可以顺利完成此操作)64位x86(3985 bogomips)慢约10倍。)。图形系统在这里可能是一个问题(我想它是 Xrender,但我不知道如何确定它)。
  • 我写了before,收到事件后不要立即重绘。以前可能不是问题,但现在是。我不能告诉你为什么,可能 Qt5 增加了绘图事件的数量,它发出了以前没有的 qWarning()s,有一些转换,其他开销。但我建议您先更改代码。
  • 问题比我一开始想的要大得多:它不仅是 Paint-Event,而且任何实现的小部件都非常非常慢。通过 ssh -X 隧道使用我们的应用程序几乎是不可能的。同样,仅使用 Qt3 编译的相同应用程序速度很快,几乎与在本地 X-Server 上一样快。但是通过隧道的Qt5是不可用的。问题非常严重,以至于我无法发布任何 Qt5-Linux 应用程序,也没有将其用于测试。总而言之,Qt5 对于 Linux 来说已经死了。我需要一个好的替代品

标签: qt5 x11


【解决方案1】:

在 Qt4.8 中,原生图形后端已被弃用。 远程 X11 不再使用 X11 调用绘制,而是通过在画布上绘制并将结果(位图)传输给客户端。这可能会导致在网络上运行 X11 时需要更大的带宽和更慢的速度。

另见this

【讨论】:

  • 在大约 15 个月的时间里,我们希望这个严重的错误能够在 Qt 中得到修复,并安装了从 5.0 到 5.5 的所有版本。该错误仍然存​​在并导致 Qt 无法用于 Linux。我们最终的解决方案是退出 Linux 的 Qt5 开发并切换到 Wx。 Wx 和 Qt3 一样快。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
相关资源
最近更新 更多