Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: KyberProtagonistes от Сентябрь 08, 2009, 16:38



Название: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 08, 2009, 16:38
Написал мини-игру. На моём компе работает на ура. Пробовал на других - какая-то ерунда. Игра запускается, но без сплеш-скрина. Потом когда, собственно, время игре начаться, в TLabel'e не появляются картинки. Картинки для тлейбла и для сплешскрина лежат в папке с экзешником и открываются методом      
Код:
QPixmap pixmap("splash.jpg");     
QSplashScreen splash(pixmap);    
splash.show();
и
Код:
label->setPixmap(QPixmap("img1.jpg"));
  (может, я как-то не так загружаю их?). Дллы все нужные скопировал тоже в папку с игрой (собственно, я все 500МБ дллов скопировал на всякий случай). В чём может быть проблема? У меня пока единственная догадка: моя ось - виста, а ось, где запускал - ХРюша. Может, какая-то несоместимость на уровне ОС? Ну, или я как-то неправильно загружаю картинки. Пока у меня других вариантов нет. Подскажите, плиз.


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: ecspertiza от Сентябрь 08, 2009, 16:52
У тебя в папке с софтиной есть папка imageformats ?


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 08, 2009, 16:54
Так. Есть папки
bin\
build\
src\
ui\

В папке бин лежат екзешник, дллы, которые я туда скинул, и картинки. Папки imageformats, вроде, нигде нет.


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: Hellraiser от Сентябрь 08, 2009, 17:21
Создай в bin папку imageformats и скопируй туда все dll из %QTDIR%\plugins\imageformats


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 08, 2009, 17:26
А вот это нужно будет в код добавлять: qApp->addLibraryPath("C:\\QtPlugins"); ??


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: whirlwind от Сентябрь 08, 2009, 17:56
просто на всякий случай, я бы писал вроде
Код:
QPixmap pixmap(QCoreApplication::applicationDirPath() + QDir::separator() + "splash.jpg");
чтобы точно быть уверенным, что проблемы с путями нет


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: spectre71 от Сентябрь 08, 2009, 17:56
Изучи Qt ресурсы(qrc), если объемы ресурсов не слишком большие(1, 2, 3.. MB), то лучше пользоваться qrc!
В некоторых случаях, - для библиотек, удобно всталять images непосредственно в код в виде char*[] массивов в XPM формате(смотри QPixmap ( const char * const[] xpm ))
Пример:
Код
C++ (Qt)
static char *XpmButtonBrowse[]={
"14 12 2 1",
". c None",
"# c #4c4cba",
"..............",
"..............",
"..............",
"..............",
"..............",
"..##..##..##..",
"..##..##..##..",
"..............",
"..............",
"..............",
"..............",
".............."};
///
///
QPixmap PixmapBrowse (XpmButtonBrowse);


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 08, 2009, 18:48
просто на всякий случай, я бы писал вроде
Код:
QPixmap pixmap(QCoreApplication::applicationDirPath() + QDir::separator() + "splash.jpg");
чтобы точно быть уверенным, что проблемы с путями нет
Попробую, спасибо.

Изучи Qt ресурсы(qrc), если объемы ресурсов не слишком большие(1, 2, 3.. MB), то лучше пользоваться qrc!
В некоторых случаях, - для библиотек, удобно всталять images непосредственно в код в виде char*[] массивов в XPM формате(смотри QPixmap ( const char * const[] xpm ))
Пример:
Код
C++ (Qt)
static char *XpmButtonBrowse[]={
"14 12 2 1",
". c None",
"# c #4c4cba",
"..............",
"..............",
"..............",
"..............",
"..............",
"..##..##..##..",
"..##..##..##..",
"..............",
"..............",
"..............",
"..............",
".............."};
///
///
QPixmap PixmapBrowse (XpmButtonBrowse);
Не, это сильно жестоко =) У меня 3 кратинки 100*150 и одна вообще большая.


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: spectre71 от Сентябрь 08, 2009, 19:19
Не, это сильно жестоко =) У меня 3 кратинки 100*150 и ...

3*100*150*4 =~ 176 KB  -  маловатенько будет :) (я писал про несколько MB)

одна вообще большая.
Это сколько?


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 08, 2009, 19:22
Большая - 800*600, по-моему. Хотя, я уже понял, для вас она небольшая =)

Кажется, мне помогло добавление папки imagesformats со всеми её плагинами - у знакомого на ХР благополучно запустилась игра со сплешем и всеми картинками.

Всем спасибо!


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: spectre71 от Сентябрь 08, 2009, 19:41
Большая - 800*600, по-моему. Хотя, я уже понял, для вас она небольшая =)

Кажется, мне помогло добавление папки imagesformats со всеми её плагинами - у знакомого на ХР благополучно запустилась игра со сплешем и всеми картинками.

Всем спасибо!
Изучи QRC! Поможет!
1) Они в исполняемом файле, который "мэпируется" системой => доступ к данным ресурсам максимально быстрый.
2) Чтение ресурсов из файлов черевато глюками(ошибки, тормоза - занятость файловой системы(проблема Windows), итд.)
К примеру, у меня в пректе > 100 катинок, и ни одной не подгружается непосредственно из файла. При этом, ~90 в ресурсах и остальное в коде в виде XPM(для моих библиотечных классов)

Кстати, твоя проблема могла быть из-за "jpg", лучше использовать "png"


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: cya-st от Сентябрь 08, 2009, 22:13
Еще можно проверить какие библиотеки слинкованы с вашим прилжоением с помощью инструмента http://www.dependencywalker.com/ (http://www.dependencywalker.com/). Все что вам нужно - это запустить его примерно так:

  depends <исполняемый файл приложения>

Это предоставит список библиотек, от которых зависит ваше приложение, и другую информацию.


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: lit-uriy от Сентябрь 08, 2009, 23:21
В Асистенте по развёртыванию приложения написано, в форуме много написано. И всё равно один и тотже вопрос задаётся.
См. Вики (http://www.wiki.crossplatform.ru/index.php/Развертывание_приложений_Qt_в_MS_Windows)


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: shadone от Сентябрь 09, 2009, 14:36
поддержка формата Jpeg в Qt реализауется с помощью плагина - вам нужно в директории с исполняемым файлом сделать структуру папок plugins/imageformats/ и положить туда плагин, потом с помощью qt.conf (http://doc.qt.nokia.com/4.5/qt-conf.html) указать путь до плагина (установив "Prefix=.").


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: BRE от Сентябрь 09, 2009, 14:43
поддержка формата Jpeg в Qt реализауется с помощью плагина - вам нужно в директории с исполняемым файлом сделать структуру папок plugins/imageformats/ и положить туда плагин, потом с помощью qt.conf (http://doc.qt.nokia.com/4.5/qt-conf.html) указать путь до плагина (установив "Prefix=.").
Папку plugins делать не надо, только папку imageformats.
Цитата из assistent:
Цитировать
But where is the plugins directory? When the application is run, Qt will first treat the application's executable directory as the pluginsbase. For example if the application is in C:\Program Files\MyApp and has a style plugin, Qt will look in C:\Program Files\MyApp\styles.


Название: Re: Неполное функционирование программы на другом компьютере
Отправлено: KyberProtagonistes от Сентябрь 09, 2009, 15:04
Значит, что сделал я. Во-первых, скопировал папку imageformats из кьютешной папки в папку с моим исполняемым файлом. Во-вторых, как посоветовали, заменил открытие картинок на такое:
Код:
QPixmap pixmap(QCoreApplication::applicationDirPath() + QDir::separator() + "splash.jpg");

В итоге, на компе без кьюта (ХР) эта программа нормально запустилась. Ещё раз всем спасибо.