【发布时间】: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 来说已经死了。我需要一个好的替代品