Russian Qt Forum
Февраль 05, 2012, 21:39
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Установка, сборка, отладка, тестирование
(Модератор:
Sergeich
) >
Подключение плагинов при переносе на машину без установленной Qt.
Страниц: [
1
]
2
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Подключение плагинов при переносе на машину без установленной Qt. (Прочитано 7395 раз)
ilot
Гость
Подключение плагинов при переносе на машину без установленной Qt.
«
:
Декабрь 21, 2009, 18:24 »
Здравствуйте. Столкнулся с проблемой - при переносе на машину без установленной библиотеки QT не подключается плагин для работы с изображением (qjpeg4.dll) - там, где должна быть картинка, пустое место. Все остальное работает нормально. Решения, которые я пробовал мне не помогли. А пробовал я следующие способы:
1. Добавление в функцию main() дополнительного пути к списку, по которому приложение производит поиск библиотек:
Код:
QApplication app(argc,argv);
QApplication::addLibraryPath(app.applicationDirPath() + "/plugins/");
в папку plugins перенес все папки с плагинами;
2. копировал в директорию с исполняемым файлом папку с нужными плагинами (imageformats);
3. пробовал применять конфигурационный файл qt.conf следующего содержания:
Код:
[Path]
Plugins = plugins
где plugins - папка с плагинами, находится в директории с исполняемым файлом.
qt.conf нормально подхватывается приложением - предопределенные пути изменяются как нужно(проверял с помощью QLibraryInfo), но
эффекта нет.
Других вариантов у меня нет. У кого есть собственный опыт решения такой проблемы?
Qt собрана как shared. Проект собирают в VS2008. Статическая сборка проекта мной не рассматривается.
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 3840
Жаждущий знаний
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #1 :
Декабрь 21, 2009, 18:42 »
Поищи по форуму, вопрос уже не раз поднимался. Если не найдешь, отпишись.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
ilot
Гость
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #2 :
Декабрь 21, 2009, 19:00 »
Да, поднимался. Например, здесь
http://www.prog.org.ru/topic_8865_0.html
. Я просмотрел все темы, касающиеся проблем с плагинами (нашлось их немного). Я использовал предлагаемые решения, но мне это не помогло. Да и сами авторы, как в приведенном примере, не сообщали об успешном разрешении проблемы. Поэтому я решил создать новую тему.. Даже зарегистрироваться пришлось
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 3840
Жаждущий знаний
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #3 :
Декабрь 21, 2009, 19:08 »
Покажи место, где подгружаешь картинку в программе.
Таких проблем не должно быть, если собрать Qt с параметром -qt-libjpeg.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
ilot
Гость
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #4 :
Декабрь 21, 2009, 19:20 »
Код:
QPixmap pix;
pix.load("picture.jpg");
m_picture = new QLabel;
m_picture->resize(600, 400);
m_picture->setFrameStyle(QFrame::Panel|QFrame::Raised);
m_picture->setPixmap(pix.scaled(QSize(600,400)));
На машине с установленной Qt все работает нормально, поэтому дело должно быть в подключении самого плагина.
Я смотрел ProcessExplorer-ом список dll, которые задействует приложение: при запуске в системе с Qt qjpeg4.dll загружается программой, а на целевой машине (без Qt) данная библиотека не подхватывается.
библиотека собиралась со следующими опциями:
Код:
configure -platform win32-msvc2008 -shared -qt-sql-odbc -qt-sql-sqlite -no-qt3support -no-opengl -no-phonon -qt-style-windowsxp
«
Последнее редактирование: Декабрь 21, 2009, 19:25 от ilot
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 3840
Жаждущий знаний
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #5 :
Декабрь 21, 2009, 19:25 »
Попробуй полный путь к картинке, на всякий случай. Т.е. pix.load("c:\picture.jpg");
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3293
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #6 :
Декабрь 21, 2009, 19:29 »
можно путь и относительный:
./picture.jpg
П.С. Пантер, ты забыл слеш заэкранировать
Записан
Юра.
ilot
Гость
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #7 :
Декабрь 21, 2009, 19:42 »
А причем здесь путь к картинке? Программа, запущенная на машине с Qt, ее прекрасно находит в собственной директории.
Цитата: lit-uriy от Декабрь 21, 2009, 19:29
можно путь и относительный:
./picture.jpg
путь и так относительный указывается.
На всякий случай попробовал - не помогло.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3293
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #8 :
Декабрь 21, 2009, 19:46 »
По идее варианта №2 (из твоего первого сообщения) достаточно.
Почисть кэш плагинов, возможно, при эксперементах в него был занесён этот плагин.
Записан
Юра.
Пантер
Administrator
Джедай : наставник для всех
Offline
Сообщений: 3840
Жаждущий знаний
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #9 :
Декабрь 21, 2009, 19:46 »
lit-uriy: каюсь, забыл.
ilot: попробуй собрать с ключем -qt-libjpeg.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
ilot
Гость
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #10 :
Декабрь 21, 2009, 20:27 »
lit-uriy: почитал про кеш плагинов...
Цитировать
In order to speed up loading and validation of plugins, some of the information that is collected when plugins are loaded is cached through QSettings. This includes information about whether or not a plugin was successfully loaded, so that subsequent load operations don't try to load an invalid plugin.
Таким образом, в кеш попадает информация обо всех когда либо загруженных плагинах: имя, успешность загрузки, timestamp последней модификации. Здесь начинается самое интересное: при запуске программы на "чистой" системе в реестре в нужном месте появляются записи обо ВСЕХ плагинах из папки imageformats. Отсюда можно сделать вывод, что плагины системой все-таки как-то подхватываются (вопрос: до конца ли?). Если удалить ветку с инфой о плагинах и запустить программу снова, то записи в реестре создаются заново. Вроде все правильно.. А нужно эффекта все нет - изображение не появляется.
Вообще говоря, чистка кеша (как и любого др. кеша) плагинов актуально только, если в них были произведены изменения. Например, если бы я занимался разработкой/модификацией плагинов. А так там все данные актуальны.
Пантер: можно, конечно, попробовать.. от безисходности. Только думается мне, что тогда бы на машине с Qt это тоже не работало.
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3293
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #11 :
Декабрь 21, 2009, 22:03 »
ну как вариант проверить на третьей машине, по варианту №2.
Есть ещё переменная окружения QT_DEBUG_PLUGINS, для отладки плагинов, но я никогда не пользовался.
Про отладку плагинов можно прочитать на русском
здесь
«
Последнее редактирование: Декабрь 21, 2009, 22:08 от lit-uriy
»
Записан
Юра.
crackedmind
Крякер
Offline
Сообщений: 341
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #12 :
Декабрь 22, 2009, 10:30 »
Проверь, плагины вообще загружаются.
В OpenHomm я так проверяю.
Код:
void checkPlugins()
{
QList<QByteArray> formats = QImageReader::supportedImageFormats();
if ( !formats.contains("def") || !formats.contains("pcx" )) {
QMessageBox::critical(NULL, "Critical error!", "Plugins didn't load. Files maybe corrupted. Try to re-install application.");
exit(1);
}
}
p.s. поддержка форматов def & pcx естественно реализована своими плагинами
«
Последнее редактирование: Декабрь 22, 2009, 10:34 от crackedmind
»
Записан
Qt 4.7.0/Qt Creator 2.0.1 / Windows Vista & XP x86
Qt 4.6.3/Qt Creator 1.3.1 / ArchLinux x86_64
ilot
Гость
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #13 :
Январь 15, 2010, 15:00 »
Цитата: crackedmind от Декабрь 22, 2009, 10:30
Проверь, плагины вообще загружаются.
На виртуальной машине поставил оригинальную сборку WinXPSP2. Перенес проект, результат тот же - jpg-картинка перестала отображаться.
Воспользовавшись советом от
crackedmind
, проверил подгружаемые плагины.
На машине с установленной Qt выдало такой список поддерживаемых форматов:
bmp gif ico jpeg jpg mng pbm pgm png ppm svg tif tiff xbm xpm
На "чистой" тестовой машине:
bmp pbm pgm png ppm xbm xpm
Недосдача...
Сконвертировал jpg в png, пересобрал, перенес на тестовую машину - все нормально отображается.
Буду использовать png, но вопрос так и остался открытым. Поэтому, если кто что-нибудь знает - пишите!
P.S. папка imageformats переносится с исполняемым файлом со всем своим содержимым.
Записан
SASA
Программист
Offline
Сообщений: 523
Re: Подключение плагинов при переносе на машину без установленной Qt.
«
Ответ #14 :
Январь 15, 2010, 15:50 »
А файлика qt.conf рядом не валяется?
Записан
Страниц: [
1
]
2
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...