QPixmap реентерабелен?

У меня есть программа, которая должна загрузить много QPixmaps. Я разделил загрузку растровых изображений на несколько заданий, используя QtConcurrent::mappedReduced (Я на самом деле загружаю кучу QGraphicPixmapItemс). Функция загрузки вызывает только конструкторы QPixmaps /QGraphicItems, он не пытается выполнить какой-либо рисунок, и он не связывается с остальным миром (по крайней мере, через мой код), пока загрузка не будет завершена.

Я получаю некоторые случайные сбои во время инициализации (скажем, 1% случаев), и Helgrind жалуется на неохраняемый доступ к QApplication от QPixmap и из основного цикла событий, но известно, что мьютексы Qt, как правило, не очень хорошо смешиваются с valgrind, так что это может быть ложным срабатыванием.

Как обычно, в документации Qt неясно, QPixmap реентерируемый или нет, это в основном мой вопрос.

1 ответ

Ну, у вас происходит сбой и вы спрашиваете, все ли в порядке? Вы уже знаете ответ. Это не хорошо.

Единственный вопрос, который я вижу здесь, это ошибка Qt. Нет, это не так.

Если вы хотите загрузить много растровых изображений, загрузите их в QImages, а затем преобразовать их в формат резервного хранилища. В наши дни не так уж много можно извлечь из использования растрового изображения поверх изображения. Пока изображение имеет тот же формат, что и хранилище резервных копий виджета (приведено к QImage), у вас будет такая же производительность. QPixmap Различие имело смысл, когда Qt все еще использовал нативную живопись. В Windows и OS X растровое изображение просто правильно отформатировано QImage,

Другие вопросы по тегам