Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QPixmap и многопоточность
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Общие вопросы
wiz29
Недавно столкнулся со следующей проблемой.
При многопоточной загрузке в объекты QPixmap (методом load(...)) переодически возникали падения, может ли быть это связано с тем, что метод QPixmap::load(...) не потокобезопасен?

код примерно такой:

struct ScaledImageInfo
{
    QString m_fileName;
    QPixmap m_image;
};

class makeThumbnail
{
    public:

        typedef ScaledImageInfo result_type;

        makeThumbnail(int w, int h)
            :m_w(w)
            ,m_h(h)
        {
        }

        ~makeThumbnail()
        {
        }

    public:

        ScaledImageInfo operator()(QString fileName)
        {            
            ScaledImageInfo sii;
            sii.m_fileName = fileName;            
            if (sii.m_image.load(fileName))
            {
                sii.m_image = sii.m_image.scaled(m_w, m_h, Qt::KeepAspectRatio/*,
                                        Qt::SmoothTransformation*/);
            }
            return sii;
        }

    private:

        int m_w;
        int m_h;
};

void proc()
{
     QStringlist files;
     ...
     QtConcurrent::mapped(files, makeThumbnail(128, 128));
     ...
}


Заменил QPixmap на QImage и падений пока не замечал...
alex977
Из http://doc.crossplatform.ru/qt/4.6.x/threads-modules.html

Цитата
Painting in Threads

QPainter can be used in a thread to paint onto QImage, QPrinter, and QPicture paint devices.
Painting onto QPixmaps and QWidgets is not supported.


Похоже, так и есть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.