Здравствуйте! Помогите пожайлуста разобраться со следующей проблемой. Скачал с сайта троллей опенсорсовскую версию QT 4.2.1 с MinGW. Есть у них там экзамплы на тему drandrop'a, а конкретнее puzzle. Если взять экзешник этого пазла и скопировать на комп с голой виндой (даже без студии)) дополнив его темя библиотеками (QtGui4.dll, QtCore4.dll и mingwm10.dll) он будет работать, но рисунки в формате JPG будут приводить к сообщению об ошибке: не могу открыть рисунок. при этом BMP работать будет... помогите понять от чего это зависит...
20.01.10 20:25: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Для работы с разными форматами изображений в Qt используется система плагинов.
Это dll-ки с соответствующим имтерфейсом.
Вожможно несколько вариантов
Скомпилировать jpeg плагин статически (см параметры configure.exe)
Рядом с прогой положить каталог plugins\imageformats, а в него засунуть jpeg плагин (qjpeg1.dll)
Рядом с прогой положить файл qt.conf, а в ём написать где лежат плагины.
Добавить/указать путь к плагинам с помощью QCoreApplication::addLibraryPath и QCoreApplication::setLibraryPaths
Спасибо огромное за помощь, но всё же... этот пример работает на том компе, где стоит QT без всякого плагина (я стёр переменную PATH, скопировал экзешник в отдельную папку и дополнил его 3мя dll-ками, указанными выше)... с теме же 3 длл-ками на компе с чистой виндой не работает jpg... может я не так PATH затёр? я вызвал cmd, в нём затёр PATH и из него же запустил... помогите понять пожайлуста... более того я запускал в дебаггере и не видел, чтобы там подключался плагин, видел тока 3 dll-ки, которые необходимы проекту, остальные вроде бы все виндовые...
Здравствуйте, Tonal-, Вы писали:
T>А куда ты положил qjpeg1.dll?
На компе где это работает, я его никуда вообще не клал. А там где нет, пробовал в ту же папку где экзешник и по путям, которые вы советовали. Просто не понятно, там где работает работает по всей видимости без плагина... может QT что-то меняет в системе после установки, что его примеры там работают на ура или куда-нить отдельно прописывает плагины?
Короче я вполне верю и даже уверен в том, что дело в плагине, но для того чтобы в этом убедиться я должен сделать так, чтобы пример перестал работать по причине нехватки плагина на компе, где он работает, а у меня сделать это не получается. Плагин есть только в одном месте (в примерах QT) и даже его переименование никак не влияет на работу. Может есть какая-то система привязки файлов к компу? типа на компе, где вы разрабатываете, всё будет работать, а когда распространяете — поставляйте плагины... честно не знаю что и думать...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Tonal-, Вы писали:
T>>А куда ты положил qjpeg1.dll?
А>пробовал в ту же папку где экзешник
Не будет работать А>и по путям, которые вы советовали.
Каким именно?
Нарисуй дерево каталогов. Что где у тебя лежит.
А>там где работает работает по всей видимости без плагина...
Работает с плагином. В этом можно убедиться напустив Depend.
Кстати, его же можно использовать, чтобы понять откуда прога пытается плагины грузить.
А>может QT что-то меняет в системе после установки, что его примеры там работают на ура или куда-нить отдельно прописывает плагины?
В общем случае нет, но в реестре есть ключик HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults
В ём закешированы пути где плагины ищутся в первую очередь.
Можно его убить, если есть какие-нибудь конфликты.
Но это похоже не твой случай.
Спасибо за помощь, я наконец-то понял... уверившись что дело в плагине я почитал в доках про плагины и мне стало всё ясно почему у меня не получилось:
Вы писали ранее:
Рядом с прогой положить каталог plugins\imageformats, а в него засунуть jpeg плагин (qjpeg1.dll)
Тока путь другой, просто imageformats без plugins. Но главное идея была правильной, а я так был убеждён сначало что дело не в плагине, что даже не углубился в их суть. Премного благодарствую