Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Physicist от Май 04, 2010, 20:36



Название: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: 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/55102/test_sln.zip)

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

 Заранее огромное спасибо за помощь!


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Sancho_s_rancho от Май 04, 2010, 21:30
Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 05, 2010, 00:08
Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.

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

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

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

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


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: voronElf от Май 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 для бд


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Sancho_s_rancho от Май 05, 2010, 06:42
Насколько я помню, в куте графические форматы через плагины. Вам необходимо таскать с собой плагины и прочитать документацию о qt.conf.
Добавил в каталог с exe-файлом файл qt.conf:
Код:
[Paths]
Plugins=.

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

Дожно работать, если правильный путь указан. Может надо ./plugins? Ну или используй setLibraryPaths().


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: p166 от Май 05, 2010, 09:31
В PNG их переведи.


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: garryHotDog от Май 05, 2010, 16:05
Цитировать
В PNG их переведи.
с Png 100% работает, сам сталкивался с такой проблемой, теперь все храню в png!!!


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 05, 2010, 18:53
хм... png конечно попробую... но тут уж дело принципа ))
Кстати, сегодня запустил на машине, на которой установлена VS2008 и нет Qt..
Все прекрасно отобразилось!

мне кажется здесь что-то со связкой: plugins - mcvs runtime libs


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 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-юзал, что куда копировал и т.д...
Спасибо за все ответы.


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 06, 2010, 09:57
наткнулся на статью: http://doc.crossplatform.ru/qt/4.3.2/deployment-windows.html (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 ?

И вообще, это похоже на мой случай?


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: ufna от Май 06, 2010, 12:05
подожди, у тебя иконки не пашут когда ты из-под MSVS запускаешь или когда?

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


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 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


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: ufna от Май 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  );


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 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 и отпишусь...


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 07, 2010, 02:39
Фуф... проблему решил:

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

Осталось теперь понять, что за зверь этот такой (в чем его суть) - манифест =)
А так.. заработало! )


Название: Re: отображение иконок в Windows 7 и Windows XP, проблема с отбражением в XP
Отправлено: Physicist от Май 07, 2010, 11:27
Получилось и с VS2008 redist.
Действительно, release версия проканала! )