Класс QPluginLoader
Класс QPluginLoader загружает плагин во время выполнения. Подробнее...
| Заголовок: | #include <QPluginLoader> |
| qmake: | QT += core |
| Наследует: | QObject |
Примечание: Все функции в этом классе являются реентерабельными.
Свойства
Открытые функции
| QPluginLoader(const QString &fileName, QObject *parent = nullptr) | |
| QPluginLoader(QObject *parent = nullptr) | |
| virtual | ~QPluginLoader() |
| QString | errorString() const |
| QString | fileName() const |
| QObject * | instance() |
| bool | isLoaded() const |
| bool | load() |
| QLibrary::LoadHints | loadHints() const |
| QJsonObject | metaData() const |
| void | setFileName(const QString &fileName) |
| void | setLoadHints(QLibrary::LoadHints loadHints) |
| bool | unload() |
Статические открытые члены
| QObjectList | staticInstances() |
| QVector<QStaticPlugin> | staticPlugins() |
Связанные нечлены
| void | qRegisterStaticPluginFunction(QStaticPlugin plugin) |
Подробное описание
QPluginLoader предоставляет доступ к плагину Qt. Плагин Qt хранится в динамической библиотеке (DLL) и предлагает следующие преимущества по сравнению с динамическими библиотеками, доступными с помощью QLibrary:
- QPluginLoader проверяет, что плагин скомпилирован с той же версией Qt, что и приложение.
- QPluginLoader предоставляет прямой доступ к корневому объекту компонента (instance()), а не заставляет вас вручную разрешать C-функцию.
Экземпляр объекта QPluginLoader работает с одним файлом динамической библиотеки, который мы называем плагином. Он предоставляет доступ к функциональности плагина независимо от платформы. Чтобы указать, какой плагин загрузить, передайте имя файла в конструкторе или установите его с помощью setFileName().
Наиболее важные функции — load() для динамической загрузки файла плагина, isLoaded() для проверки успешности загрузки и instance() для доступа к корневому компоненту в плагине. Функция instance() неявно пытается загрузить плагин, если он еще не загружен. Можно использовать несколько экземпляров QPluginLoader для доступа к одному физическому плагину.
После загрузки плагины остаются в памяти до тех пор, пока не будут выгружены все экземпляры QPluginLoader или пока не завершит работу приложение. Можно попробовать выгрузить плагин с помощью unload(), но если другие экземпляры QPluginLoader используют ту же библиотеку, вызов завершится неудачей, а выгрузка произойдёт только когда каждый экземпляр вызовет unload(). Непосредственно перед выгрузкой корневой компонент также будет удалён.
См. Как создать плагины Qt для получения дополнительной информации о том, как сделать ваше приложение расширяемым с помощью плагинов.
Обратите внимание, что QPluginLoader нельзя использовать, если ваше приложение статически скомпилировано с Qt. В этом случае вам также нужно статически скомпилировать плагины. Вы можете использовать QLibrary, если вам нужно загрузить динамические библиотеки в статически скомпилированном приложении.
См. также QLibrary и Пример «Подключай и рисуй».
Документация свойств
fileName : QString
Это свойство содержит имя файла плагина.
Рекомендуется опускать расширение файла в имени файла, так как QPluginLoader автоматически ищет файл с соответствующим расширением (см. QLibrary::isLibrary()).
При загрузке плагина QPluginLoader ищет во всех путях к библиотекам, указанных в QCoreApplication::libraryPaths(), если имя файла не имеет абсолютного пути. После успешной загрузки плагина fileName() возвращает полное имя файла плагина, включая полный путь к плагину, если он был задан в конструкторе или передан в setFileName().
Если файл с указанным именем не существует, он не будет установлен. Тогда это свойство будет содержать пустую строку.
По умолчанию это свойство содержит пустую строку.
Функции доступа:
| QString | fileName() const |
| void | setFileName(const QString &fileName) |
См. также load().
loadHints : QLibrary::LoadHints
Предоставляет load() функции некоторые подсказки о том, как она должна вести себя.
Вы можете указать подсказки о том, как должны быть разрешены символы в плагине. По умолчанию с Qt 5.7 устанавливается QLibrary::PreventUnloadHint.
См. документацию QLibrary::loadHints для полного описания работы этого свойства.
Это свойство было добавлено в Qt 4.4.
Функции доступа:
| QLibrary::LoadHints | loadHints() const |
| void | setLoadHints(QLibrary::LoadHints loadHints) |
См. также QLibrary::loadHints.
Документация функций-членов
QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = nullptr)
Конструирует загрузчик плагинов с заданным parent, который будет загружать плагин, указанный в fileName.
Для загрузки файл должен иметь допустимое для данной платформы расширение, например, .so на Unix, - .dylib на macOS и iOS, и .dll на Windows. Расширение можно проверить с помощью QLibrary::isLibrary().
См. также setFileName().
QPluginLoader::QPluginLoader(QObject *parent = nullptr)
Конструирует загрузчик плагинов с заданным parent.
[virtual] QPluginLoader::~QPluginLoader()
Удаляет объект QPluginLoader.
Если unload() не был явно вызван, плагин остаётся в памяти до завершения приложения.
См. также isLoaded() и unload().
QString QPluginLoader::errorString() const
Возвращает строку текста с описанием последней ошибки.
Эта функция была добавлена в Qt 4.2.
QObject *QPluginLoader::instance()
Возвращает корневой объект компонента плагина. Плагин загружается при необходимости. Функция возвращает nullptr если плагин не удалось загрузить или если корневой объект компонента не удалось создать.
Если корневой объект компонента был уничтожен, вызов этой функции создаёт новый экземпляр.
Корневой компонент, возвращаемый этой функцией, не удаляется при уничтожении QPluginLoader. Если вы хотите убедиться, что корневой компонент удален, вы должны вызвать unload(), как только вам больше не нужно обращаться к основному компоненту. Когда библиотека, наконец, будет выгружена, корневой компонент будет автоматически удален.
Объект компонента является QObject. Используйте qobject_cast(), чтобы получить доступ к интересующим вас интерфейсам.
См. также load().
bool QPluginLoader::isLoaded() const
Возвращает true если плагин загружен; в противном случае возвращает false.
См. также load().
bool QPluginLoader::load()
Загружает плагин и возвращает true если плагин был успешно загружен; в противном случае возвращает false. Поскольку instance() всегда вызывает эту функцию перед разрешением каких-либо символов, нет необходимости вызывать её явно. В некоторых ситуациях вам может потребоваться предварительная загрузка плагина, в этом случае вы будете использовать эту функцию.
См. также unload().
QJsonObject QPluginLoader::metaData() const
Возвращает метаданные для этого плагина. Метаданные представляют собой данные, указанные в формате json с помощью макроса Q_PLUGIN_METADATA() при компиляции плагина.
Метаданные могут быть запрошены быстрым и недорогим способом, не загружая фактически плагин. Это позволяет, например, хранить возможности плагина в них и принимать решение о загрузке плагина, в зависимости от этих метаданных.
[static] QObjectList QPluginLoader::staticInstances()
Возвращает список статических экземпляров плагина (корневых компонентов), хранящихся в загрузчике плагинов.
См. также staticPlugins().
[static] QVector<QStaticPlugin> QPluginLoader::staticPlugins()
Возвращает список QStaticPlugins, хранящихся в загрузчике плагинов. Функция похожа на staticInstances(), с добавлением того, что QStaticPlugin также содержит информацию о метаданных.
См. также staticInstances().
bool QPluginLoader::unload()
Выгружает плагин и возвращает true если плагин может быть выгружен; в противном случае возвращает false.
Это происходит автоматически при завершении приложения, поэтому обычно вам не нужно вызывать эту функцию.
Если другие экземпляры QPluginLoader используют тот же плагин, вызов завершится неудачей, и выгрузка произойдет только тогда, когда каждый экземпляр вызовет unload().
Не пытайтесь удалить корневой компонент. Вместо этого полагайтесь на то, что unload() автоматически удалит его при необходимости.
См. также instance() и load().
Связанные нечленные функции
void qRegisterStaticPluginFunction(QStaticPlugin plugin)
Регистрирует указанный plugin с загрузчиком плагинов и используется Q_IMPORT_PLUGIN().
Эта функция была добавлена в Qt 5.0.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qpluginloader.html