Редактирование: Развертывание приложений Qt в MS Windows

Материал из Wiki.crossplatform.ru

Перейти к: навигация, поиск
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 1: Строка 1:
-
Как указано в Асистенте, библиотека Qt не является системной. Т.е. она не распространяется штатно с ОС MS Windows. Следовательно при распространении программ, написаных на [[Qt]] для ОС MS Windows необходимо вместе с вашей программой распространять и библиотеки (dll'ки) самой Qt.
+
== Введение ==
-
__TOC__
+
При распространении программ, написаных на [[Qt]] под платформу MS Windows, может возникнуть проблема, например, с использованием плагинов. Причиной тому является факт жестко заштых в dll'ки путей к компонентам Qt, например, к плагинам. Этот путь всегда выглядит так: {{cmd|%QTDIR%/Plugins/}}, где %QTDIR% - каталог, в которой собрана версия библиотеки Qt использовавшая при сборке приложения. Следовательно, при запуске приложения, Qt ядро вашей программы (QtCore.dll) будет пытатся найти плагины Qt в каталоге {{cmd|%QTDIR%/Plugins/}}. Вероятнее всего на компьютере пользователя такого каталога нет. Существует несколько способов обойти эту проблему. Далее описаны эти способы.
-
== Общее описание ==
 
-
При распространении потребуются следующие dll'ки:
 
-
* dll'ки компилятора (для MinGW32 - mingwm10.dll и, если GCC4.4.x ещё libgcc_s_dw2-1.dll);
 
-
* dll'ки Qt из катлога {{cmd|%QTDIR%/bin/}};
 
-
* dll'ки плагинов Qt из катлога {{cmd|%QTDIR%/Plugins/}}
 
-
== dll'ки Qt ==
+
== Указание путей в самой программе ==
-
Из катлога {{cmd|%QTDIR%/bin/}} необходимо взять dll'ки тех модулей которые вы используете. По умолчанию используются модули QtCore и QtGui (QtCore4.dll и QtGui4.dll, соответственно). И dll'ки других модулей, например, если в pro-файле есть запись:
+
В каталоге, куда устанавливается ваша программа, можно создать такой подкаталог<br />
-
: QT += xml
+
{{cmd|%PATH_TO_APP%/QtPlugins/}},<br />
-
то необходимо взять и QtXml4.dll.<br />
+
-
{{Замечание|Если вы используете отладочную версию своей программы (CONFIG +{{=}} debug), то нужно взять dll'ки с буквой "'''d'''":
+
-
: QtCore'''d'''4.dll, QtGui'''d'''4.dll и QtXml'''d'''4.dll
+
-
для примера выше.}}
+
-
 
+
-
Эти dll'ки должны быть помещены в один каталог с исполняемым файлом вашего приложения.
+
-
 
+
-
== dll'ки плагинов Qt ==
+
-
С плагинами Qt дела обстоят несколько сложнее. Причиной тому является факт жестко зашитых, в dll'ки, путей к плагинам Qt. Этот путь всегда выглядит так: {{cmd|%QTDIR%/Plugins/}}, где %QTDIR% - каталог, в котором собрана/установлена та версия библиотеки Qt, которая использовалась при сборке приложения. Следовательно, при запуске приложения, Qt ядро вашей программы (QtCore4.dll) будет пытатся найти плагины Qt в каталоге {{cmd|%QTDIR%/Plugins/}}. Вероятнее всего на компьютере пользователя такого каталога нет. Существует несколько способов указать приложению, где искать плагины. Далее описаны эти способы.
+
-
 
+
-
=== Копирование плагинов в каталог с программой ===
+
-
Как сказано в Асистенте (plugins-howto.html)
+
-
{{цитата|Когда приложение запущено, Qt сначала просматривает каталог исполняемого файла приложения в качестве '''pluginsbase'''. Например, если приложение находится в C:\Program Files\MyApp и имеет подключаемый модуль стиля, Qt будет искать в C:\Program Files\MyApp\styles.}} Другими словами, каталоги плагинов Qt (например, '''imageformats''' или '''sqldrivers''') необходимо скопировать в каталог, где расположен исполняемый фал приложения/
+
-
 
+
-
<!--
+
-
=== Указание путей в самой программе ===
+
-
В каталоге, куда устанавливается ваша программа, можно создать такой подкаталог {{cmd|%PATH_TO_APP%/QtPlugins/}},<br />
+
где %PATH_TO_APP% - путь к каталогу приложения.
где %PATH_TO_APP% - путь к каталогу приложения.
-
В этот каталог необходимо скопировать из каталога {{cmd|%QTDIR%/Plugins/}} все содержимое или только то, что вам действительно нужно.<br />
+
В этот каталог необходимо скопировать из каталога {{cmd|%QTDIR%/Plugins/}} все содержимое или только то, что вам действительно нужно. Но, обязательно, сохраните структуру вложеных каталогов!
-
{{Замечание}} ''обязательно, сохраните структуру (иерархию) вложеных каталогов!''
+
Затем вам нужно добавить несколько строк кода в ваше приложение. Функция '''main()''' должна выглядеть так:
Затем вам нужно добавить несколько строк кода в ваше приложение. Функция '''main()''' должна выглядеть так:
-
<source lang=cpp-qt>
+
{{code|qt|code=
int main(int argc, char *argv[])
int main(int argc, char *argv[])
{
{
Строка 42: Строка 19:
     QStringList list_path; // Список путей
     QStringList list_path; // Список путей
-
     QDir dir = QDir(app.applicationDirPath()+"/QtPlugins/"); //Наш каталог %PATH_TO_APP%/QtPlugins/
+
     QDir dir = QDir(qApp->applicationDirPath()+"/QtPlugins/"); //Наш каталог %PATH_TO_APP%/QtPlugins/
     list_path << dir.absolutePath () << app.libraryPaths (); //добавим в список и наши и стандартные пути
     list_path << dir.absolutePath () << app.libraryPaths (); //добавим в список и наши и стандартные пути
     app.setLibraryPaths( list_path  ); //Установим новый список путей поиска для приложения
     app.setLibraryPaths( list_path  ); //Установим новый список путей поиска для приложения
     ...
     ...
}
}
-
</source>
+
}}
-
-->
+
-
<!--
+
 
-
=== Использование файла qt.config ===
+
== Использование файла qt.config ==
''(предстоит написать)''
''(предстоит написать)''
-
-->
 
-
<!--
 
-
=== Переменная окружения QT_PLUGIN_PATH ===
 
-
''(предстоит написать)''
 
-
-->
 
== См. также ==
== См. также ==
-
* [http://www.doc.crossplatform.ru/qt/4.4.3/plugins-howto.html Как создать свой плагин] - Подробности о подключении плагинов в документации.
 
* [[Qt/FAQ]]
* [[Qt/FAQ]]
* [[Установка Qt4.3.x]]
* [[Установка Qt4.3.x]]
-
* [http://doc.crossplatform.ru/qt/4.4.3/deployment.html Документация Qt 4.4.x - Развертывание приложений Qt]
 
[[Категория:Qt FAQ]]
[[Категория:Qt FAQ]]

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Wiki.crossplatform.ru:Авторское право). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!


Шаблоны, использованные на текущей версии страницы: