Развёртывание подключаемых модулейЭтот документ объясняет как развёртывать библиотеки подключаемых модулей, которые Qt или ваше приложение будут загружать во время выполнения. Если вы используете статические подключаемые модули, тогда код подключаемого модуля уже является частью исполняемого файла приложения и отдельных шагов по развёртыванию не требуется. Каталог PluginКогда приложение запущено, Qt сначала просматривает каталог исполняемого файла приложения в качестве pluginsbase. Например, если приложение находится в C:\Program Files\MyApp и имеет подключаемый модуль стиля, Qt будет искать в C:\Program Files\MyApp\styles. (Смотрите QCoreApplication::applicationDirPath(), чтобы выяснить, где находится исполняемый файл приложения). Qt так же будет смотреть в каталоге указанном в QLibraryInfo::location(QLibraryInfo::PluginsPath), который обычно расположен в QTDIR/plugins (где QTDIR - это каталог, где установлена Qt)). Если вы хотите, чтобы Qt просматривала в дополнительных местах, вы можете добавить столько путей, сколько необходимо, вызвав QCoreApplication::addLibraryPath(). Если же вы хотите установить собственный путь или пути, то вы можете воспользоваться QCoreApplication::setLibraryPaths(). Вы так же можете использовать файл qt.conf для переопределения жестко зашитых путей, которые вкомпилированы в библиотеку Qt. Для получения дополнительной информации, смотрите документацию Использование qt.conf. Еще один способ, это установить переменную окружения QT_PLUGIN_PATH перед запуском приложения. Если установлена, Qt будет искать подключаемые модули в путях (разделенных системным разделителем путей) указанных в переменной. Динамическая загрузка и проверка подключаемых модулейПри загрузке подключаемых модулей библиотека Qt делает некоторые проверки работоспособности, чтобы определить может ли подключаемый модуль быть загружен и использован или нет. Это предоставляет возможность иметь множество версий и конфигураций библиотеки Qt, установленных рядом.
При сборке подключаемых модулей, расширяющих приложение, важно убедиться, что подключаемый модуль сконфигурирован так же как и приложение. Это значит, что если приложение было собрано в режиме релиза, подключаемый модуль так же должен быть собран в режиме релиза. Если вы конфигурируете Qt для сборки и в режиме релиза и в режиме отладки, но собираете приложение только в режиме релиза, вы должны убедиться, что ваши подключаемые модули так же собираются в режиме релиза. По умолчанию, если доступна отладочная сборка Qt, подключаемые модули будут собраны только в режиме отладки. Чтобы заставить подключаемые модули собираться в режиме релиза, добавьте следующую строку в файл проекта подключаемого модуля: CONFIG += release Это гарантирует совместимость подключаемого модуля с версией библиотеки, используемой в приложении. Ключ сборкиПри загрузке подключаемого модуля Qt сверяет ключ сборки каждого подключаемого модуля со своим, чтобы убедиться, что только совместимые подключаемые модули загружены; любые подключаемые модули, которые сконфигурированы иначе загружены не будут. Ключ сборки содержит следующую информацию:
С целью отладки возможно обходить проверку ключа сборки во времени выполнения, сконфигурировав Qt с определенным макросом препроцессора QT_NO_PLUGIN_CHECK. Кэш подключаемых модулейДля того, чтобы ускорить загрузку и проверку подключаемых модулей, некоторая информация, собираемая при загрузке подключаемого модуля, кэшируется с помощью QSettings. Это включает информацию о том, был ли подключаемый модуль удачно загружен или нет, так что последующая операция загрузки не будет пытаться загрузить неправильный подключаемый модуль. Тем не менее, если поменяется "время последнего изменения" подключаемого модуля, запись в кэше считается устаревшей и подключаемый модуль загружается независимо от значений в кэше, которые обновляются в соответствии с новым результатом. Это так же означает, что штамп времени должен быть обновлён каждый раз, когда подключаемый модуль или любой зависимый ресурс (такой как общая библиотека) были обновлены, так как зависимый ресурс может влиять на результат загрузки подключаемого модуля. Иногда при разработке подключаемых модулей необходимо удалить записи из кэша подключаемых модулей. С тех пор как Qt использует QSettings для управления кэшем подключаемых модулей, размещение подключаемых модулей платформозависимо; для получения дополнительной информации о каждой платформе, смотрите документацию по QSettings. Например, в Windows записи хранятся в реестре и пути для каждого подключаемого модуля обычно начинаются с одной из этих двух строк: HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.2.debug HKEY_CURRENT_USER\Software\Trolltech\OrganizationDefaults\Qt Plugin Cache 4.2.false Отладка подключаемых модулейЕсть несколько проблем, которые могут помешать корректно написанным подключаемым модулем работать с приложением, спроектированным для их использования. Многие из них связаны с различиями в способе сборки приложений и подключаемых модулей, часто возникая из-за разных систем сборок и процессов. Следующая таблица содержит описание общих причин проблем, с которыми сталкиваются разработчики при создании подключаемых модулей:
Вы можете так же использовать переменную окружения QT_DEBUG_PLUGINS для получения диагностической информации из Qt о каждом подключаемом модуле, который она пытается загрузить. Установите эту переменную в любое не-нулевое значение, в окружении, из которого запускается ваше приложение. |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |