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

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

(Различия между версиями)
Перейти к: навигация, поиск
(пробельная строка, для визуального разделения)
(Общее описание)
 
(17 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
== Введение ==
+
Как указано в Асистенте, библиотека Qt не является системной. Т.е. она не распространяется штатно с ОС MS Windows. Следовательно при распространении программ, написаных на [[Qt]] для ОС MS Windows необходимо вместе с вашей программой распространять и библиотеки (dll'ки) самой Qt.
-
При распространении программ, написаных на [[Qt]] под платформу MS Windows, может возникнуть проблема, например, с использованием плагинов. Причиной тому является факт жестко заштых в dll'ки путей к компонентам Qt, например, к плагинам. Этот путь всегда выглядит так: {{cmd|%QTDIR%/Plugins/}}, где %QTDIR% - каталог, в которой собрана версия библиотеки Qt использовавшая при сборке приложения. Следовательно, при запуске приложения, Qt ядро вашей программы (QtCore.dll) будет пытатся найти плагины Qt в каталоге {{cmd|%QTDIR%/Plugins/}}. Вероятнее всего на компьютере пользователя такого каталога нет. Существует несколько способов обойти эту проблему. Далее описаны эти способы.
+
__TOC__
 +
== Общее описание ==
 +
При распространении потребуются следующие 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 ==
-
В каталоге, куда устанавливается ваша программа, можно создать такой подкаталог<br />
+
Из катлога {{cmd|%QTDIR%/bin/}} необходимо взять dll'ки тех модулей которые вы используете. По умолчанию используются модули QtCore и QtGui (QtCore4.dll и QtGui4.dll, соответственно). И dll'ки других модулей, например, если в pro-файле есть запись:
-
{{cmd|%PATH_TO_APP%/QtPlugins/}},<br />
+
: QT += xml
 +
то необходимо взять и 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/}} все содержимое или только то, что вам действительно нужно. Но, обязательно, сохраните структуру вложеных каталогов!
+
В этот каталог необходимо скопировать из каталога {{cmd|%QTDIR%/Plugins/}} все содержимое или только то, что вам действительно нужно.<br />
 +
{{Замечание}} ''обязательно, сохраните структуру (иерархию) вложеных каталогов!''
Затем вам нужно добавить несколько строк кода в ваше приложение. Функция '''main()''' должна выглядеть так:
Затем вам нужно добавить несколько строк кода в ваше приложение. Функция '''main()''' должна выглядеть так:
-
{{code|qt|code=
+
<source lang=cpp-qt>
int main(int argc, char *argv[])
int main(int argc, char *argv[])
{
{
Строка 19: Строка 42:
     QStringList list_path; // Список путей
     QStringList list_path; // Список путей
-
     QDir dir = QDir(qApp->applicationDirPath()+"/QtPlugins/"); //Наш каталог %PATH_TO_APP%/QtPlugins/
+
     QDir dir = QDir(app.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]]

Текущая версия на 12:58, 24 мая 2010

Как указано в Асистенте, библиотека Qt не является системной. Т.е. она не распространяется штатно с ОС MS Windows. Следовательно при распространении программ, написаных на Qt для ОС MS Windows необходимо вместе с вашей программой распространять и библиотеки (dll'ки) самой Qt.

Содержание


[править] Общее описание

При распространении потребуются следующие dll'ки:

  • dll'ки компилятора (для MinGW32 - mingwm10.dll и, если GCC4.4.x ещё libgcc_s_dw2-1.dll);
  • dll'ки Qt из катлога %QTDIR%/bin/;
  • dll'ки плагинов Qt из катлога %QTDIR%/Plugins/

[править] dll'ки Qt

Из катлога %QTDIR%/bin/ необходимо взять dll'ки тех модулей которые вы используете. По умолчанию используются модули QtCore и QtGui (QtCore4.dll и QtGui4.dll, соответственно). И dll'ки других модулей, например, если в pro-файле есть запись:

QT += xml

то необходимо взять и QtXml4.dll.

Замечание Замечание: Если вы используете отладочную версию своей программы (CONFIG += debug), то нужно взять dll'ки с буквой "d":
QtCored4.dll, QtGuid4.dll и QtXmld4.dll
для примера выше.

Эти dll'ки должны быть помещены в один каталог с исполняемым файлом вашего приложения.

[править] dll'ки плагинов Qt

С плагинами Qt дела обстоят несколько сложнее. Причиной тому является факт жестко зашитых, в dll'ки, путей к плагинам Qt. Этот путь всегда выглядит так: %QTDIR%/Plugins/, где %QTDIR% - каталог, в котором собрана/установлена та версия библиотеки Qt, которая использовалась при сборке приложения. Следовательно, при запуске приложения, Qt ядро вашей программы (QtCore4.dll) будет пытатся найти плагины Qt в каталоге %QTDIR%/Plugins/. Вероятнее всего на компьютере пользователя такого каталога нет. Существует несколько способов указать приложению, где искать плагины. Далее описаны эти способы.

[править] Копирование плагинов в каталог с программой

Как сказано в Асистенте (plugins-howto.html)

« Когда приложение запущено, Qt сначала просматривает каталог исполняемого файла приложения в качестве pluginsbase. Например, если приложение находится в C:\Program Files\MyApp и имеет подключаемый модуль стиля, Qt будет искать в C:\Program Files\MyApp\styles. »
Другими словами, каталоги плагинов Qt (например, imageformats или sqldrivers) необходимо скопировать в каталог, где расположен исполняемый фал приложения/



[править] См. также