Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Anaconda от Август 31, 2016, 21:35



Название: QPixmap::scaled не работает в QtConcurrent [РЕШЕНО]
Отправлено: Anaconda от Август 31, 2016, 21:35
Всем привет, перерыл половину Интернета, ответа не нашёл. Есть функция, которая уменьшает изображения, взятые из файлов, вектор которых подаётся в аргументе:

Код:
void MainWindow::make(QVector <QString> addresses){
//---
        QPixmap *pix = new QPixmap(QPixmap(DirName + "/" + resultList[i]).scaled(150,150,Qt::KeepAspectRatio,Qt::SmoothTransformation));
//---    
}
Эту функцию я хочу вынести в отдельный поток, чтобы не грузила гуй. Выношу таким образом:
Код:
QtConcurrent::run(this, &MainWindow::make, addresses);
Код отрабатывает, но вываливает в консоль следующее:
Код:
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap::scaled: Pixmap is a null pixmap
QPixmap: It is not safe to use pixmaps outside the GUI thread
QPixmap: It is not safe to use pixmaps outside the GUI thread
Естественно, изображение отсутствует там, где должно быть. Такое ощущение, что программа не может по каким-то причинам считать файл, однако все пути правильные, вне этой функции код отрабатывает идеально. В чём может быть дело? Заранее спасибо за любые советы.


Название: Re: QPixmap::scaled не работает в QtConcurrent
Отправлено: Racheengel от Август 31, 2016, 21:38
Ну так в сообщении прямо сказано, что QPixmap использовать вне гуя нежелательно, т.к. QPixmap изначально был задуман для применения в гуе.
Используйте QImage.


Название: Re: QPixmap::scaled не работает в QtConcurrent
Отправлено: Anaconda от Август 31, 2016, 21:44
Используйте QImage.
Чёрт, я весь вечер мучался, а надо-то было только заменить одно на другое. Огромное Вам спасибо!