Класс QPluginLoader
Класс QPluginLoader загружает плагин во время выполнения. Подробнее...
| Заголовок: | #include <QPluginLoader> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| 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() |
| QList<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 и Пример Plug & Paint.
Документация по свойствам
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 для полного описания работы этого свойства.
Функции доступа:
| 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
Возвращает текстовую строку с описанием последней ошибки.
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] QList<QStaticPlugin> QPluginLoader::staticPlugins()
Возвращает список QStaticPlugins, хранящихся в загрузчике плагинов. Функция аналогична staticInstances() с добавлением того, что QStaticPlugin также содержит информацию о метаданных.
См. также staticInstances().
bool QPluginLoader::unload()
Разгружает плагин и возвращает true если плагин удалось разгрузить; в противном случае возвращает false.
Это происходит автоматически при завершении работы приложения, поэтому обычно вызывать эту функцию не нужно.
Если другие экземпляры QPluginLoader используют тот же плагин, вызов завершится неудачей, и разгрузка произойдёт только тогда, когда каждый экземпляр вызовет unload().
Не пытайтесь удалить корневой компонент. Вместо этого полагайтесь на то, что unload() автоматически удалит его при необходимости.
См. также instance() и load().
Связанные нечлены
[since 5.0] 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-6.1/qpluginloader.html