Russian Qt Forum
Сентябрь 30, 2024, 02:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP  (Прочитано 10901 раз)
Physicist
Гость
« : Май 04, 2010, 20:36 »

Доброго времени суток!

Столкнулся с проблемой: не отображаются иконки (на кнопочках, в шапке окна и т.д...) при запуске в Windows XP.
Изначально проект компилировался в VS2008 под Windows 7 x64.
Иконки храню как ресурсы. Под семеркой все отлично отображается, запуская из любой папки...

Вообщем создал простой проект: QMainWindow в который помещен QLabel.
У QMainWindow иконку устанавливаю из ресурсов, а у QLabel pixmap устанавливаю из внешнего файла (ico). После того как откомпилил (по Windows 7) все нормально отображается. Затем скопировал исполняемый модуль, необходимые dll и файл с иконкой в отдельную папку...
И снова все работает прекрасно!

Далее, копирую эту самую папку в голую Windows XP... запускаю... в итоге - иконки не отображаются!!!  
(Пробывал и под Windows XP x64 и под Windows XP x86)

В чем дело никак не пойму... Сам раньше работал с Qt3 и с подобными проблемами не сталкивался...

Вот код test.ui:

Код:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>testClass</class>
 <widget class="QMainWindow" name="testClass">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>558</width>
    <height>583</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>test</string>
  </property>
  <property name="windowIcon">
   <iconset resource="test.qrc">
    <normaloff>:/test/Resources/titleicon.ico</normaloff>:/test/Resources/titleicon.ico</iconset>
  </property>
  <widget class="QWidget" name="centralWidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
       <string/>
      </property>
      <property name="pixmap">
       <pixmap>labelicon.ico</pixmap>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menuBar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>558</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QToolBar" name="mainToolBar">
   <attribute name="toolBarArea">
    <enum>TopToolBarArea</enum>
   </attribute>
   <attribute name="toolBarBreak">
    <bool>false</bool>
   </attribute>
  </widget>
  <widget class="QStatusBar" name="statusBar"/>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources>
  <include location="test.qrc"/>
 </resources>
 <connections/>
</ui>

test.qrc:
Код:
<RCC>
  <qresource prefix="test">
    <file>Resources/titleicon.ico</file>
  </qresource>
</RCC>

содержимое папки для запуска в Windows XP:
test_portable:
  • Microsoft.VC90.DebugCRT
    • Microsoft.VC90.DebugCRT.manifest
    • msvcm90d.dll
    • msvcp90d.dll
    • msvcr90d.dll
  • labelicon.ico
  • QtCored4.dll
  • QtGuid4.dll
  • test.exe.intermediate.manifest
  • test.exe


 Быть может кто-нить сталкивался с подобной проблемой?
 
 Прилагаю проект под VS2008 и ту самую папку "portable" версии для windows XP:

http://www.letitbit.tv/files/55102/test_sln.zip

http://www.letitbit.tv/files/55108/test_portable.zip

 Заранее огромное спасибо за помощь!
Записан
Sancho_s_rancho
Гость
« Ответ #1 : Май 04, 2010, 21:30 »

Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.
Записан
Physicist
Гость
« Ответ #2 : Май 05, 2010, 00:08 »

Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.

 Да, про плагины я забыл...
 Но чет так и не получается их зацепить:
 Сначала попробывал скопировать в папку с исполняемым модулем папку плагина imageformats
 (как описано тут: http://wiki.crossplatform.ru/index.php/Развертывание_приложений_Qt_в_MS_Windows)

 Но картинок так и нет ...

 Добавил в каталог с exe-файлом файл qt.conf:
Код:
[Paths]
Plugins=.

НО эффекта ноль ((
Записан
voronElf
Гость
« Ответ #3 : Май 05, 2010, 05:36 »

мне помогло :
Код:
	QApplication app( argc, argv );
    QDir::setCurrent(app.applicationDirPath());
app.setLibraryPaths(QStringList() << (QDir::currentPath() + "/plugins") << app.libraryPaths());
в самом начале функции main

плагины лежат в папке plugins/imageformats для грфики, plugins/sqldrivers для бд
Записан
Sancho_s_rancho
Гость
« Ответ #4 : Май 05, 2010, 06:42 »

Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.
Добавил в каталог с exe-файлом файл qt.conf:
Код:
[Paths]
Plugins=.

НО эффекта ноль ((

Дожно работать, если правильный путь указан. Может надо ./plugins? Ну или используй setLibraryPaths().
Записан
p166
Гость
« Ответ #5 : Май 05, 2010, 09:31 »

В PNG их переведи.
Записан
garryHotDog
Гость
« Ответ #6 : Май 05, 2010, 16:05 »

Цитировать
В PNG их переведи.
с Png 100% работает, сам сталкивался с такой проблемой, теперь все храню в png!!!
Записан
Physicist
Гость
« Ответ #7 : Май 05, 2010, 18:53 »

хм... png конечно попробую... но тут уж дело принципа ))
Кстати, сегодня запустил на машине, на которой установлена VS2008 и нет Qt..
Все прекрасно отобразилось!

мне кажется здесь что-то со связкой: plugins - mcvs runtime libs
Записан
Physicist
Гость
« Ответ #8 : Май 05, 2010, 19:12 »

мне помогло :
Код:
	QApplication app( argc, argv );
    QDir::setCurrent(app.applicationDirPath());
app.setLibraryPaths(QStringList() << (QDir::currentPath() + "/plugins") << app.libraryPaths());
в самом начале функции main

плагины лежат в папке plugins/imageformats для грфики, plugins/sqldrivers для бд

хм... попробывал - не проканало...
Добавил эти строчки в main:
 - да. setCurrent отработал и при запуске из под VS 2008 пришлось переместить из папки проекта в папку с исполняемым модулем файл иконки... Но при запуске из-под winXP ни одна из картинок не оторазилась (папки plugins/imageformats естественно скопировал в папку с exe как тут указывалось)

Все сильнее думаю на CRT...

Может быть кто-нить попробует на голой XP развернуть проект и потом отпишется о том - какие crt-юзал, что куда копировал и т.д...
Спасибо за все ответы.
Записан
Physicist
Гость
« Ответ #9 : Май 06, 2010, 09:57 »

наткнулся на статью: http://doc.crossplatform.ru/qt/4.3.2/deployment-windows.html

Согласно ей:
Цитировать
Для связывания библиотек времени выполнения с вашим приложением скопируйте каталог
 <Visual Studio Install Path>\VC\redist\<Architecture>\Microsoft.VC80.CRT

в каталог с вашим исполняемым файлом, так что вы включили каталог Microsoft.VC80.CRT поблизости от исполняемого файла вашего приложения. Если связали библиотеки времени выполнения и к том уже нужно развернуть подключаемые модули, то из подключаемых модулей вам нужно удалить манифест (встроенный как ресурс) добавив это в pro-файл подключаемых модулей, которые вы компилируете:
 CONFIG-=embed_manifest_dll

Если этого не сделать подключаемые модули нельзя будет загрузить на некоторых системах.

Получается мне нужно перекомпилить плагины из imageformats, добавив в их pro-файлы строчку
CONFIG-=embed_manifest_dll ?

И вообще, это похоже на мой случай?
Записан
ufna
Гость
« Ответ #10 : Май 06, 2010, 12:05 »

подожди, у тебя иконки не пашут когда ты из-под MSVS запускаешь или когда?

что конкретно у тебя лежит и как в папке, которую ты пихаешь на чистую систему?
Записан
Physicist
Гость
« Ответ #11 : Май 07, 2010, 00:09 »

подожди, у тебя иконки не пашут когда ты из-под MSVS запускаешь или когда?

что конкретно у тебя лежит и как в папке, которую ты пихаешь на чистую систему?

иконки не пашут на чистой системе

содержимое папки для запуска на чистой системе:

  • Microsoft.VC90.DebugCRT
    • Microsoft.VC90.DebugCRT.manifest
    • msvcm90d.dll
    • msvcp90d.dll
    • msvcr90d.dll
  • imageformats
    • qicod4.dll и другие либы папки
  • labelicon.ico
  • QtCored4.dll
  • QtGuid4.dll
  • test.exe.intermediate.manifest
  • test.exe
Записан
ufna
Гость
« Ответ #12 : Май 07, 2010, 01:39 »

я бы посоветовал сделать release сборку, а не debug

и сделай так, чтобы было не
imageformats/qicod4.dll

а
plugins/imageformats/qicod4.dll

и сразу после создания QApplication в мейне сделай:

Код
C++ (Qt)
   QStringList list_path;
   QDir dir = QDir(app.applicationDirPath()+"/plugins/");
   list_path << dir.absolutePath () << app.libraryPaths ();
   app.setLibraryPaths( list_path  );
Записан
Physicist
Гость
« Ответ #13 : Май 07, 2010, 02:19 »

думаю нет никакой разницы в этом вопросе между release и debug... (но попробую... чем черт не шутит)

По поводу переноса imageformats в plugins/imageformats: я уже проделывал эту процедуру... та же лажа - иконок нет...

Фишка в том, что как только я пытаюсь запустить прогу не на чистой тачке, а на тачке с установленной VS2008 (без Qt), то все выше предложенные решения начинают прекрасно работать! А вот если ограничиться установкой на чистую тачку пакета VS2008 redist , приложение вообще отказыватеся запускаться.
Ежели как делаю я: из тачки с установленной VS2008 тащу на чистую тачку в каталог приложения папку Microsoft.VC90.DebugCRT (взятую из c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\)
то приложение запускается, а иконки не отображаются...

Хм.. впрочем щас задумался: смущает название каталога Debug_NonRedist Возможно вы и правы и обязательно нужна release версия... Лады завтра попробую relese и отпишусь...
Записан
Physicist
Гость
« Ответ #14 : Май 07, 2010, 02:39 »

Фуф... проблему решил:

пересобрал плагин для иконок, добавив в pro-файл строчку:
CONFIG-=embed_manifest_dll. После этого сформировал папку как описал в предыдущих постах

Осталось теперь понять, что за зверь этот такой (в чем его суть) - манифест =)
А так.. заработало! )
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.133 секунд. Запросов: 20.