0

我有一个程序需要加载很多QPixmaps。QtConcurrent::mappedReduced我使用(我实际上加载了一堆QGraphicPixmapItems)将像素图的加载拆分为几个作业。加载函数仅调用QPixmaps/ s的构造函数QGraphicItem,它不会尝试执行任何绘图,并且在加载完成之前它不会与世界其他地方通信(至少通过我的代码)。

我在初始化期间遇到了一些随机崩溃(比如 1% 的时间),并且 helgrind 抱怨QApplicationQPixmap主事件循环和从主事件循环的不受保护的访问,但众所周知,Qt 互斥锁通常不能与 valgrind 很好地混合,所以它可能是误报。

像往常一样,Qt 文档对于是否QPixmap可重入非常不清楚,这基本上是我的问题。

4

1 回答 1

2

好吧,你遇到崩溃,你问它是否可以?你已经知道答案了。不行。

我在这里看到的唯一问题是它是否是 Qt 错误。不,这不对。

如果要加载大量像素图,请将它们加载到 中QImages,然后将它们转换为后备存储格式。如今,在图像上使用像素图并没有太多好处。只要图像与小部件的后备存储具有相同的格式(转换为QImage),您将具有相同的性能。QPixmap当 Qt 仍然使用原生绘画时,这种区别是有意义的。在 Windows 和 OS X 上,像素图只是格式正确的QImage.

于 2015-03-23T16:31:16.260 回答