C++ QWidget paintEvent无理由停止调用
在我的一个Qt应用程序中更新QWidget时,我发现了一个非常奇怪的情况。当在没有任何警告或命令的情况下调用widget->update()方法时,会突然停止调用widget的paintEvent(QEvent*) 我的应用程序在嵌入式Linux中使用Qt 4.8.5 for ARM,有两个(相关)线程:一个线程从套接字连接获取数据,用它填充缓冲区,并调用远程对象中的一个插槽,要求它更新plot小部件(使用update()函数)。另一个线程是负责小部件绘制(Qt中的一个规则)的主线程,它执行C++ QWidget paintEvent无理由停止调用,c++,multithreading,qt,C++,Multithreading,Qt,在我的一个Qt应用程序中更新QWidget时,我发现了一个非常奇怪的情况。当在没有任何警告或命令的情况下调用widget->update()方法时,会突然停止调用widget的paintEvent(QEvent*) 我的应用程序在嵌入式Linux中使用Qt 4.8.5 for ARM,有两个(相关)线程:一个线程从套接字连接获取数据,用它填充缓冲区,并调用远程对象中的一个插槽,要求它更新plot小部件(使用update()函数)。另一个线程是负责小部件绘制(Qt中的一个规则)的主线程,它执行vo
void paintEvent(QEvent*)
函数。因此,事件的顺序是:
slotPQDataChanged
李>
slotPQDataChanged
调用子小部件的update
函数:poSubWidget->update()代码>
paintEvent(QEvent*)
函数。它内部有一个QPainter,可以在上面绘制接收到的数据李>
这个过程大约每秒发生5次。当我启动系统时,一切正常运行了一段时间(正常情况下为5-10分钟),但随后poSubWidget的更新突然停止。我确信不是阅读线程停止了,因为,由于调用了qDebug()
,我知道“slotPQDataChanged”会继续被调用。我也知道不是主线程被杀死或者类似的事情,因为当问题发生时,屏幕上的计时器仍然工作正常。我知道在调用update()
时,在我的代码中没有必要要求子小部件不要更新
当然,我不知道到底发生了什么;对SO的(快速)研究没有得出积极的结果
值得一提的是,我的应用程序可能有一个错误,它会导致它有时因为“内存不足”而被杀死
那么,对可能发生的事情有什么建议吗?1)首先解决内存不足问题。这很容易成为问题的根源
2) 除非您确切地知道自己在做什么,否则使用线程连接到GUI不是一个好主意。(这也可能是问题的根源)线程和gui应使用连接。在我的视频播放程序中,线程和gui存在相同的问题-
paintEvent()
在~5分钟后停止调用。通过将update()
调用从一个单独的线程移动到一个小部件的插槽中(通过信号调用),解决了这个问题。因此,请确保从QT的事件线程中调用update