Ошибки чтения Jpeg с использованием QImage в релизных сборках

У кого-нибудь возникали проблемы с использованием Qt и метода загрузки класса QImage при попытке загрузить изображения в формате jpeg. Загрузка отлично работает в режиме отладки с использованием QtCreator, но полностью терпит неудачу при попытке загрузить те же изображения jpeg, когда приложение создается, а затем запускается в режиме выпуска.

QImage myImage;
QString s = QDir().toNativeSeparators(QFileDialog::getOpenFileName(this, QString("Import Image...")));
if ( !myImage.load(s) ) {
    QMessageBox msgBox;
    msgBox.setWindowTitle(this->windowTitle());
    msgBox.setWindowIcon(this->windowIcon());
    msgBox.setIcon(QMessageBox::Information);
    msgBox.setText("Image could not be loaded.");
    msgBox.exec();
    return;
}

Я пришел к выводу, что мне может не хватать определенной библиотеки динамической компоновки, но я не могу предвидеть, какая именно. Обратите внимание, что в режиме деблокирования я все еще могу обрабатывать изображения PNG.


person johnsonwi    schedule 15.01.2013    source источник
comment
Вы используете Windows или Linux? Если вы запускаете сборку релиза с помощью QtCreator, она работает?   -  person Vinícius Gobbo A. de Oliveira    schedule 15.01.2013
comment
jpg плагин может быть? stackoverflow.com/ вопросы/2241141/ stackoverflow.com/questions/12800346/   -  person    schedule 15.01.2013
comment
Да, jpeg работает, когда я запускаю приложение из сборки выпуска в QtCreator, но не когда я развертываю его в автономных окнах. Да с помощью Windows. Все работает, кроме загрузки jpeg.   -  person johnsonwi    schedule 15.01.2013
comment
Так что плагин jpg отсутствует. Вопросов (и ответов тоже) по одной и той же проблеме в Stack Overflow около десятка.   -  person    schedule 15.01.2013


Ответы (2)


Добавьте папку imageplugins (или imageformats) в файл build. Для использования jpg требуется, чтобы libjpeg.dll была доступна для исполняемого файла. Найдите в каталоге установки Qt необходимые файлы.

person Aakash Goyal    schedule 15.01.2013
comment
Я сделал это, но безуспешно, моя папка форматов изображений содержит qgif2.dll, qico4.dll, qjpeg4.dll, qmng4.dll, qsvg4.dll, qtiff4.dll. - person johnsonwi; 04.02.2013
comment
моя папка содержит: qgif4.dll, qgifd4.dll, qico4.dll, qicod4.dll, qjpeg.dll, qjpeg4.dll, qjpegd4.dll, qmng4.dll, qmngd4.dll, qsvg4.dll, qsvgd4.dll, qtga4. dll, qtgad4.dll, qtiff4.dll, qtiffd4.dll - person johnsonwi; 04.02.2013
comment
все еще не могу загрузить изображения в формате jpeg - person johnsonwi; 04.02.2013
comment
попробуйте поместить папку imageformats с вашим исполняемым файлом, где он может найти DLL. - person Aakash Goyal; 05.02.2013
comment
единственные изображения, которые я могу открыть в выпуске, - это файлы png. Я могу получить доступ ко всем типам изображений в Qt, но только к png, когда он распространяется. - person johnsonwi; 06.02.2013

Вероятно, одна из dll, необходимых вашим приложениям, не найдена в вашей переменной окружения PATH. Вы можете использовать Dependency Walker, чтобы узнать, какие dll отсутствуют.

person Vinícius Gobbo A. de Oliveira    schedule 15.01.2013
comment
Я попытался включить папку plugins/imageformats в свой исполняемый файл. Я пришел к выводу, что невозможно отправить qt exe с поддержкой jpeg. - person johnsonwi; 04.02.2013
comment
Даже попытка QString sDir = QCoreApplication::applicationDirPath(); a.addLibraryPath(sDir+/plugins); - person johnsonwi; 04.02.2013
comment
Невозможно это не так, как я сделал. Вы проверили вывод Dependency Walker? - person Vinícius Gobbo A. de Oliveira; 04.02.2013