Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с использованием системы ресурсов
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt GUI
Страницы: 1, 2
groove
С помощью дизайнера создаю форму, добавляю для нее файл ресурсов, в которых запихиваю картинки.
Затем эти самые картинки использую в виджетах формы.

Как бы я не использовал ресурсы (компилировал в бинарник приложения, либо подключал как внешние ресурсы), на другой машине всегда картинки пропадают. На той где компилируется - все ок, а стоит попробовать под другой ОС - так обязательно проблема.

Никто не сталкивался?
ViGOur
Покажи файл ресурсов.
К чему ты цепляешь картинки и каким образом?
Какая версия Qt и компилятор?

Поподробней опиши свои действия...
Litkevich Yuriy
groove, Не забудь что путь к ресурсам начинается с двоеточия:
":/pics.png"
groove
Вот тестовый проект: http://ifolder.ru/5502423

Ресурсы берутся из внешнего файла. Если запускать на машине, где нет Qt, тогда картинка на форме отображена не будет, если запускать там же где и компилировалось, то все OK.

Для запуска на чистой машине потребуются файлы: mingwm10.dll, QtCore4.dll, QtGui4.dll.

Версия Qt: 4.3.2, OpenSouce Edition. Бря сборку TrollTech.
Версия MinGW: MinGW-3.2.0.
Litkevich Yuriy
уменя была такая проблема:
скомпилил на виндовозе, картинки задуманы читатся при запуске приги из предопределенного каталога, если каталог таскаю с бинарем по виндовозовским тачкам, то все путем, пересобрал в Лине, картинок нет, путь был указан к ним так:
p_pix->load("pics/well_prsr.png");


зделал так:
p_pix->load("./pics/well_prsr.png");

все за работало, и в Лине и Виндовозе
groove
Цитата(Litkevich Yuriy @ 26.2.2008, 18:31) *
уменя была такая проблема:
скомпилил на виндовозе, картинки задуманы читатся при запуске приги из предопределенного каталога, если каталог таскаю с бинарем по виндовозовским тачкам, то все путем, пересобрал в Лине, картинок нет, путь был указан к ним так:
p_pix->load("pics/well_prsr.png");


зделал так:
p_pix->load("./pics/well_prsr.png");

все за работало, и в Лине и Виндовозе

Тут в пределах одной ОС нифига не работает.
AD
Та же проблема. Не отображаются картинки, если запускаю на другой машине. Путь указываю, чтобы отображалось полный, т.е., например, D:/Projects/Src/TransasLogViewer/Images/open.png.
На той машине, что компилю, все отображаются.

P.S. exe-файл лежит вот здесь D:\Projects\Win32\Bin\Release\TransasLogViewer\TLV.exe,
либо D:\Projects\Win32\Bin\Debug\TransasLogViewer\TLV.exe
Litkevich Yuriy
AD22,
Нельзя абсолютный путь указывать, это большие грабли, либо относительно приложения, либо с ситемными переменными (актуально для линуха)

groove,
Вообщем попробывал я твою прогу посмотреть в профилеровщике, ня своей машине (есть Qt) и на VMWare (нет Qt), сравнил логи, на моей машине в логе есть такие строчки:
Цитата
LoadLibraryW("F:/Qt/4.3.2/plugins/imageformats/qjpeg4.dll") called from "QTCORE4.DLL" at address 0x101134F5.
Loaded "QJPEG4.DLL" at address 0x017C0000. Successfully hooked module.
DllMain(0x017C0000, DLL_PROCESS_ATTACH, 0x00000000) in "QJPEG4.DLL" called.
DllMain(0x017C0000, DLL_PROCESS_ATTACH, 0x00000000) in "QJPEG4.DLL" returned 1 (0x1).
LoadLibraryW("F:/Qt/4.3.2/plugins/imageformats/qjpeg4.dll") returned 0x017C0000.
GetProcAddress(0x017C0000 [QJPEG4.DLL], "qt_plugin_instance") called from "QTCORE4.DLL" at address 0x101143F5 and returned 0x017C13B0.


а на другой машине в логе нет таких строчек, положил qjpeg4.dll в каталог с бинарем, эфект тотже, ни картинки ни таких строчек в логе.

Надо думать как это плагин прицепить.
Litkevich Yuriy
БЛИН, я тут открытие совершил, у менято тоже проблема, svg-рисунки нечитаются, jpeg неиспользую, png читаются нормально :(

-- вобщем новая тема: Как распространять, программы использующие Qt-плагины?
Litkevich Yuriy
groove, твое заработало, после некоторых экспериментов смотри пост
trdm
Цитата(groove @ 26.2.2008, 11:52) *
Вот тестовый проект: http://ifolder.ru/5502423

без проблем все показало...
Litkevich Yuriy
Цитата(trdm @ 12.3.2008, 4:17) *
без проблем все показало...

на сырой тачке без Qt'ей?
ViGOur
Ну вот, а теперь по всей видимости нужно собирать и писать общее описание, чтобы не было мороки при перечитке... :)
AD
просьба: напишите точно, как надо путь указывать. Относительно чего, нужно ли или не нужно таскать сами картинки с собой? Указать путь к dll плагинов, это-то сделал. Заранее благодарю!
ViGOur
Litkevich Yuriy, есть время сделать описание как и что, просто ты вроде этим заморочился, соответственно и тему лучше знаешь. :)
AD
Цитата(ViGOur @ 12.3.2008, 11:03) *
Litkevich Yuriy, есть время сделать описание как и что, просто ты вроде этим заморочился, соответственно и тему лучше знаешь. :)

Мне все-равно кто, но поможете? Надо ли использовать void Q_INIT_RESOURCE ( name ) для динамической сборки? Вообще как сделать-то?
Litkevich Yuriy
Цитата(ViGOur @ 12.3.2008, 14:03) *
есть время сделать описание

у меня еще четкого представления не сложилось, а в срочном порядке искал путь по причине того, что через неделю надо будет шефу показать что-нибудь, бум Qt'я использовать или будем продолжать пользовать Builder 5.
Соответственно пока использую вариант тащить кучу dll'ок на сырую машину, сейчас другой головняк появился.
Описание пока четкого нет только наброски.
Litkevich Yuriy
AD, ну если тебе горит, именно распространение программы, пользуй пока вариант 2 с переменной PATH, у меня сечас напряг со временем
AD
Кстати есть еще один вопрос: есть dll-файлы под .jpg, .gif, .tiff, .svg; какой из них для .png использовать? Тот, что под .svg?
Хочу просто описать проблему: на счет dll-файлов и их использования все более-менее понятно. Непонятно как присобачить картинки так, чтобы они видны были. По всем учебникам выходит так, что если exe-file (назовем, для простоты, tlv.exe) лежит, предположим, в D:\QtEx\tlv.exe, то картинки лежат по адресу D:\QtEx\Images\*.png, которые заносятся в *.qrc файл, а затем вызываются вот под таким адресом :/images/*.png! Но даже сделав так, как указано в справочниках на других машинах ничего не отображается. :( Надо еще создавать .rcc файл? Для меня это загадка...... :blink: :unsure:
Litkevich Yuriy
с png можешь не беспокоится он всегда работает, он внутри Qt'ей
Это единственная, видимо, вещь с которой нет проблем.
Я делал так и это всегда работает, если конечно прога вообще запустилась:
  // Кнопки
  QPushButton    *btnStart = new QPushButton;
  QPushButton    *btnInfo = new QPushButton;
  QPushButton    *btnStop = new QPushButton;
    // Настраиваем кнопки
    btnStart->setMaximumSize(btn24);
    btnStart->setMinimumSize(btn24);
    
    btnInfo->setMaximumSize(btn24);
    btnInfo->setMinimumSize(btn24);
    
    btnStop->setMaximumSize(btn24);
    btnStop->setMinimumSize(btn24);
    
    // Устанавливаем иконки на кнопки
    btnStart->setIcon(QIcon(QString::fromUtf8("./pics/24px_On.png")));    
    btnStart->setIconSize(icon24);
    btnStart->setFlat(true);
    
    btnInfo->setIcon(QIcon(QString::fromUtf8("./pics/24px_Info.png")));    
    btnInfo->setIconSize(icon24);
    btnInfo->setFlat(true);
    
    btnStop->setIcon(QIcon(QString::fromUtf8("./pics/24px_Off.png")));    
    btnStop->setIconSize(icon24);
    btnStop->setFlat(true);

т.е. неиспользовал никаких файлов ресурсов,
прога лежит в каталоге Foo,
картинки в каталоге Foo/pics/
загружаются во время выполнения
AD
Цитата(Litkevich Yuriy @ 13.3.2008, 17:44) *
с png можешь не беспокоится он всегда работает, он внутри Qt'ей
Это единственная, видимо, вещь с которой нет проблем.

т.е. неиспользовал никаких файлов ресурсов,
прога лежит в каталоге Foo,
картинки в каталоге Foo/pics/
загружаются во время выполнения

Т.е. картинки таскаешь с собой?
Litkevich Yuriy
да, а какая разница, все равно еще dll'ки таскать, папкой больше папкой меньше.
AD
Цитата(Litkevich Yuriy @ 13.3.2008, 18:30) *
да, а какая разница, все равно еще dll'ки таскать, папкой больше папкой меньше.

Какие dll, кроме необходимых для запуска, т.е. QtGui4, QtCore4?
Litkevich Yuriy
ну мне еще mingwm10.dll, т.к. я MinGW пользую
AD
Блин, не работают эти png-картинки, хоть убей. Все перепробовал. Пока ничего не получилось, чтобы они отображались!
AD
Сделал Q_INIT_RESOURCE(tlv_resource). Все-равно пока что на других компах не отображается!
Litkevich Yuriy
расскажи как ты распространяешь свою софтину, что куда ставишь?
AD
Цитата(Litkevich Yuriy @ 3.4.2008, 17:35) *
расскажи как ты распространяешь свою софтину, что куда ставишь?

Картинки png-формата. В той же папочке, что и exe-file есть папка images, где и лежат эти картинки. В коде есть qrc - файл, где прописаны эти картинки! Еще что-то нужно для этих png?
ViGOur
Все никак не доберусь опробовать твою проблему до конца. :(
Litkevich Yuriy
AD, где лежит твой exe'шник?
где лежат Qt'явые dll'ки?
AD
Цитата(Litkevich Yuriy @ 3.4.2008, 18:26) *
AD, где лежит твой exe'шник?
где лежат Qt'явые dll'ки?

все dll лежaт в одной папке вместе с exe-file! Название папки что-ли дать? Не понимаю, какой ответ хочешь получить, извини? :)
Litkevich Yuriy
данный каталог в переменной PATH числится?
картинки у тебя в png, а то я забыл уже?
AD
Цитата(Litkevich Yuriy @ 3.4.2008, 19:13) *
данный каталог в переменной PATH числится?
картинки у тебя в png, а то я забыл уже?

А он долже обязательно числится??? Картинки в png!!!
Litkevich Yuriy
попробуй забить переменную PATH
ViGOur
Цитата(Litkevich Yuriy @ 3.4.2008, 20:10) *
попробуй забить переменную PATH
Думаю это не решение.
Попробую сварганитть пример работы с картинками, но как скоро не знаю, сами видите, не всегда время есть. :(
Litkevich Yuriy
AD, ты можешь дать какой нибудь исходник, простой?
Который у тебя не получается распространять, я бы попробывал у себя скомпилить и проверить.
---
вот моё: Нажмите для просмотра прикрепленного файла
выглядеть должно так:

распространяю так:
Цитата
pics/
12-Wellwgt.exe
mingwm10.dll
QtCore4.dll
QtGui4.dll

mingwm10.dll, нужен т.к. компилирую с помощью MinGW32, в каталоге pics, лежат png-рисунки, которые на лету подгружаются.

т.е. если это у тебя будет работать, значит надо с файлами ресурсов разбираться.
Litkevich Yuriy
Еще вот от Макса Шлее пример с файлом qrc, у меня распространяется без проблем, так:
Цитата
Window.exe
mingwm10.dll
QtCore4.dll
QtGui4.dll
AD
Цитата(Litkevich Yuriy @ 4.4.2008, 5:23) *
AD, ты можешь дать какой нибудь исходник, простой?
Который у тебя не получается распространять, я бы попробывал у себя скомпилить и проверить.
---
вот моё: Нажмите для просмотра прикрепленного файла
выглядеть должно так:

распространяю так:
Цитата
pics/
12-Wellwgt.exe
mingwm10.dll
QtCore4.dll
QtGui4.dll

mingwm10.dll, нужен т.к. компилирую с помощью MinGW32, в каталоге pics, лежат png-рисунки, которые на лету подгружаются.

т.е. если это у тебя будет работать, значит надо с файлами ресурсов разбираться.

Попробовал твой пример. Все заработало в примере. Заметил, что в папочке pics помимо png-картинок еще какие-то svg-файлы? Что это за файлы? Как их получить?
Litkevich Yuriy
Можешь их удалить, это файлы вектрной графики, из них я делал PNG, т.к. при масштабировании векторной графики качество картинки не меняется.
AD
Проблема с отображением картинок самоликвидировалась! Т.Е. картинки теперь отображаются! В чем фокус не очень понял, но картинки без особых помех отображаются на всех компьютерах! :)
ViGOur
Тэкс, а как решил то? :)
Litkevich Yuriy
Дык, он и сам не понял :)
kuler
почему в висуал студии при попытке задать windowicon появляется диалог в котором ничего нельзя сделать кроме как вручную ввести имя файла? (там есть 2 компонента, один из которых подписан "Preview"). При установке там имени файла иконка не появляется, а если в коде setWindowIcon(QIcon("1.png"));, то появляется.
kuler
a как qdialog установить иконку?
Litkevich Yuriy
Цитата(kuler @ 13.11.2008, 15:02) *
a как qdialog установить иконку?
что-то я не понял вопроса. Если он тоже применительно к студии, лучше выделить в отдельную тему, я думаю она быстрее людям на глаза попадется.
kuler
это вопрос вообще

windowIcon : QIcon
This property holds the widget's icon.

This property only makes sense for windows. Видимо изза этого не устанавливается (хотя диалог и есть отдельное окно)
Litkevich Yuriy
kuler, может я и не понял в чем проблема, но вот этот тест работает, я его переделал из этого под использование QDialog
Нажмите для просмотра прикрепленного файла
kuler
Litkevich Yuriy,
чото я не понял как там присоединена иконка приложения
Litkevich Yuriy
главное чтобы ты с иконкой для диалога разобрался, а если тябя интерисует иконка exe'шника пока он не запущен, то задавай в указаной мною теме, если ты ее вообще прочитал.
kuler
так я и спрашивал про иконку, которая на заголовке окна
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2021 IPS, Inc.