我在QT中拥有自己的应用程序。它有一个主要的GUI线程,它将从输入处理事件,但我创建了一个适用于每10秒更改图像的线程(就像幻灯片或屏幕保护程序一样)。但是当我从线程调用函数setPixmap时,它会警告我从线程中使用Pixmap是不安全的。
解决方案是什么?为什么我不使用线程中的setPixmap?
谢谢, 尼尔
答案 0 :(得分:2)
原因,是因为该函数不是线程安全的。
解决方案是使用QTimer每10秒运行一次功能。 QTimer集成在Qt事件循环中,因此您不需要其他线程来执行此操作。
答案 1 :(得分:1)
我没有这方面的实际答案,但我知道只应从主GUI线程调用setPixmap()
。几年前我发现这个邮件列表的帖子也指向了trolltechs的文档。通过阅读这个东西很快就让我觉得它与不同平台如何渲染东西等有关。
http://lists.trolltech.com/qt-interest/2008-11/thread00534-0.html
http://doc.trolltech.com/4.4/threads.html#painting-in-threads
答案 2 :(得分:0)
不要让你的工作线程调用setPixmap()
,而是让它发出信号(类似newImagesReady()
)。
然后,将该信号连接到窗口小部件的update()
插槽。 (或者如果你想做的不仅仅是刷新小部件,还可以制作自己的插槽。)
这个technique允许您跨越线程边界。