Класс 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() |
| QVector<QStaticPlugin> | staticPlugins() |
- 11 статических открытых членов унаследованы от 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()
Возвращает корневой компонент объекта плагина. Плагин загружается при необходимости. Функция возвращает 0, если плагин не удалось загрузить или корневой компонент объекта не удалось создать.
Если корневой компонент объекта был уничтожен, вызов этой функции создаёт новый экземпляр.
Корневой компонент, возвращаемый этой функцией, не удаляется при уничтожении 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/archives/qt-5.11/qpluginloader.html