Класс QPluginLoader
Класс QPluginLoader загружает плагин во время выполнения. Подробнее...
| Заголовок: | #include <QPluginLoader> |
| qmake: | QT += core |
| Наследуется от: | QObject |
Примечание: Все функции в этом классе являются реентерабельными.
Свойства
- 1 свойство унаследовано от QObject
Открытые функции
| QPluginLoader(QObject *parent = nullptr) | |
| QPluginLoader(const QString &fileName, 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() |
- 32 открытых функции унаследованы от QObject
Статические открытые члены
| QObjectList | staticInstances() |
| const QMetaObject | staticMetaObject |
| QVector<QStaticPlugin> | staticPlugins() |
- 10 статических открытых членов унаследованы от QObject
Связанные нечлены
| void | qRegisterStaticPluginFunction(QStaticPlugin plugin) |
Дополнительные унаследованные члены
- 1 открытый слот унаследован от QObject
- 2 сигналов унаследовано от QObject
- 9 защищённых функций унаследованы от QObject
Подробное описание
Класс QPluginLoader загружает плагин во время выполнения.
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 для полного описания работы этого свойства.
Это свойство было добавлено в Qt 4.4.
Функции доступа:
| QLibrary::LoadHints | loadHints() const |
| void | setLoadHints(QLibrary::LoadHints loadHints) |
См. также QLibrary::loadHints.
Документация по функциям-членам
QPluginLoader::QPluginLoader(QObject *parent = nullptr)
Конструктор загрузчика плагинов с заданным parent.
QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = nullptr)
Конструктор загрузчика плагинов с заданным parent, который загрузит плагин, заданный параметром fileName.
Для загрузки файла его суффикс должен соответствовать допустимому суффиксу загружаемой библиотеки в соответствии с платформой, например, .so в Unix, - .dylib в macOS и iOS, и .dll в Windows. Суффикс можно проверить с помощью QLibrary::isLibrary().
См. также setFileName().
[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.12/qpluginloader.html