C++ Qt应用程序随机无法正确绘制显示黑屏的界面

C++ Qt应用程序随机无法正确绘制显示黑屏的界面,c++,qt,debugging,embedded-linux,C++,Qt,Debugging,Embedded Linux,一段时间以来,我在Qt应用程序中遇到了一个非常奇怪的错误:运行一段时间后,该应用程序界面上所有不经常更新的部分都变成了黑色: 我在这里一无所知。这不是这个问题第一次出现,上一次(几个月前)它以同样神秘的方式消失了。顺便说一句,10k+行代码中没有任何一部分会给出发生这种情况的任何理由,最近的任何更改都不会影响到所有软件屏幕的绘制 有关详情: 我正在为嵌入式Linux使用Qt4.8 这种情况会发生:有时会,有时不会 这不是硬件问题:我在不同的硬件中进行了测试,所有的硬件都出现了问题 这只发生在

一段时间以来,我在Qt应用程序中遇到了一个非常奇怪的错误:运行一段时间后,该应用程序界面上所有不经常更新的部分都变成了黑色:

我在这里一无所知。这不是这个问题第一次出现,上一次(几个月前)它以同样神秘的方式消失了。顺便说一句,10k+行代码中没有任何一部分会给出发生这种情况的任何理由,最近的任何更改都不会影响到所有软件屏幕的绘制

有关详情:

  • 我正在为嵌入式Linux使用Qt4.8
  • 这种情况会发生:有时会,有时不会
  • 这不是硬件问题:我在不同的硬件中进行了测试,所有的硬件都出现了问题
  • 这只发生在任何屏幕/小部件中-它不是系统中某个屏幕所独有的
  • 在“黑bug”出现之前,屏幕看起来很正常:标签显示其文本,pixmap显示其pixmap,等等。。当“黑色bug”出现时,所有这些突然消失,并被纯黑色所取代,唯一的例外是移动的部件(感谢QTimer或类似的东西)。请参见上图,并注意图表周围的黑色区域,其中应该有大量QpushButton和Qlabel
  • 我在某些部分使用了QtWidgets+自定义widgets+自定义绘画,但就我所见,这在所有地方都会发生。不涉及OpenGL
  • 该应用程序有一个基本的qmain窗口,在该窗口上显示许多屏幕(大多数屏幕都是在等待
    show()
    命令出现时创建的)。这个bug可以出现在所有小部件中
  • 关于使用其他东西,我只使用Qwt和QwtPolar。未使用“高级图形打印”库
  • 我不能说它是“100%可复制的”,因为它偶尔会出现,而且不知道何时会出现,是否会出现。例如,我们让它在上周末和周一运行一些测试,但是在同一个周一,我们发现了至少3次错误
  • 除了目标平台,我没有在任何地方尝试过
  • 到目前为止,在谷歌没有找到任何帮助
  • 我试着用代码做一些打印屏幕:

    QPixmap screenshotPixmap=QPixmap::grabWindow(QApplication::desktop()->winId())

    const bool resp=screenshotPixmap.save(fileTemp.fileName(),“png”,90)

但是pixmap还可以:没有黑色部分。尽管为用户显示,
QPixmap::grabWindow
没有“注意到错误”,并正确地抓取了窗口


值得记住的是,我没有发布任何代码,因为没有与此bug相关的特定已知代码(即使我可以,整个代码也不适合这里,也不是开源的!)。显然,我并不期望得到一些具体的答案,但更像是在过程中可能已经遇到过这个问题的人的一般提示,或者一些一般的调试技巧(除了将文件与版本控制器进行比较)。尽管我在这一点上迷失了方向,但任何帮助都将不胜感激。

这就是为什么有时商业支持会有回报的原因。你可能需要和Qt公司谈谈这一点……我脑海中浮现出一些问题:当不是黑色时,UI是什么样子的?您使用的是widgets+自定义绘制还是QtQuick?是否涉及到OpenGL?这是单个全屏窗口还是多个窗口?您是否使用X11、directfb等其他工具?它是100%可复制的吗?除了目标平台(例如桌面linux),你还试过别的东西吗?@FrankOsterfeld谢谢你的回复。我编辑了问题的详细列表以回答您的所有问题。看一看!