我有一个程序需要加载很多的QPixmaps。我使用QtConcurrent::mappedReduced
在几个作业中分割了pixmaps的加载(实际上我加载了一堆QGraphicPixmapItem
s)。加载函数只调用 QPixmap
s / QGraphicItem
的构造函数,它不会尝试执行任何绘图,也不会与世界其他地方进行通信(至少通过我的代码)直到加载完成。
我在初始化期间遇到一些随机崩溃(比如1%的时间),并且helgrind抱怨QApplication
和QPixmap
对QPixmap
的无保护访问事件循环,但众所周知,Qt互斥体通常与valgrind不能很好地混合,所以它可能是误报。
像往常一样,Qt文档很清楚{{1}}是否可以重入,这基本上是我的问题。
答案 0 :(得分:2)
嗯,你崩溃了,你问是否可以?你已经知道了答案。这不行。
我在这里看到的唯一问题是它是否是Qt错误。不,不是。
如果要加载大量像素图,请将它们加载到QImages
中,然后将它们转换为后备存储格式。如今,在图像上使用像素图可以获得很多东西。只要图像具有与窗口小部件的后备存储(转换为QImage
)相同的格式,您就可以获得相同的性能。当Qt仍然使用原生绘画时,QPixmap
区别是有意义的。在Windows和OS X上,像素图只是格式正确的QImage
。