我对QT的图形视图框架很陌生,我在文档或Google上找不到任何相关内容。
我有一个GUI应用程序,可以绘制一些数据的表示。应用程序本身可以处理矩阵/向量(神经网络事物)并且必须在QGraphicsScene
上表示它。到目前为止这么好,但我注意到应用程序段错误和如果我尝试从另一个线程更新QGraphicsScene
,迟早会崩溃(通常会更快)。 QT Docs没有提及线程安全性和安全性。谷歌什么都没有。我想要(并且非常需要)做的是运行计算&相应地更新GUI表示,但GUI控件等自己必须保持响应。正如我所说,我的第一个想法是在另一个线程中完成整个事情,但如果我尝试的话,它会随机崩溃。
在QT中是否有任何“接受的做法”来做这种事情,或者在图形视图框架本身中是否存在一些我不知道的问题?
答案 0 :(得分:2)
Qt文档实际上说quite a lot about thread safety。如果QGraphicsScene
的文档没有说出任何内容,那是因为它们不是线程安全的,与您看到的行为一致。
您需要做的是在另一个线程中运行计算并根据需要将该线程与主GUI线程同步。一种简单的方法是在计算准备好显示时在主线程中设置一个标志。这样,只需检查标志,就可以在正确的时间调用主线程中的相应QGraphicsScene
方法。