Qt5和X11存在严重的性能问题

Qt5和X11存在严重的性能问题,qt5,x11,Qt5,X11,我们将应用程序从Qt3移植到Qt5。它在Windows下运行平稳,但在Linux(X11)下运行不平稳。对于Qt3,Windows或Linux没有问题 在应用程序内部有一个大约1000x800像素的画布。在画布上绘制一个简单的矢量图形。用户点击画布,按住鼠标按钮并移动鼠标。每次鼠标移动都会导致重新绘制 我们在每个阶段注册了毫秒数: 开始MouseMove事件处理:10581 调用update或repaint(对哪一个没有区别) 处理产生的油漆事件:10583 油漆饰面:10584 更新/重新绘制

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


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

我们在每个阶段注册了毫秒数:

开始MouseMove事件处理:10581

调用update或repaint(对哪一个没有区别)

处理产生的油漆事件:10583

油漆饰面:10584

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

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


我需要帮助

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


另请参见什么是Qt图形系统?如果是
光栅
,将其更改为
opengl
,并检查工件和性能问题。“每次鼠标移动都会导致重新绘制。”为什么?这是设计的吗?每只鼠标都是设计的结果。这不是Qt3的问题。只涉及几百个或几个thosund向量(带有Qt3的Rhasberry Pi(464 bogomips)可以顺利实现这一点),64位x86(3985 bogomips)大约慢10倍。)。图形系统可能是这里的一个问题(我想它是Xrender,但我不知道如何确定它)。这以前可能不是一个问题,但现在是。我不能告诉你为什么,Qt5可能增加了绘图事件的数量,它发出了以前没有的qWarning(),有一些转换,其他开销。但是我建议你先修改你的代码。问题比我一开始想的要严重得多:不仅仅是绘画事件,任何实现的小部件都非常非常慢。通过ssh-X隧道使用我们的应用程序几乎是不可能的。同样,仅使用Qt3编译的同一应用程序速度很快,几乎与本地X服务器上的速度一样快。但是通过隧道的Qt5无法使用。这个问题非常严重,我无法发布任何qt5linux应用程序,也不能将其用于测试。总之,Qt5对于Linux来说就像死了一样。我需要一个好的替代品大约15个月,我们希望这个严重的错误将在Qt中修复,并安装所有版本从5.0到5.5。该缺陷仍然存在,并使Qt无法用于Linux。我们的最终解决方案是退出针对Linux的Qt5开发并切换到Wx。Wx和Qt3一样快。