Класс QPluginLoader
Класс QPluginLoader загружает плагин во время выполнения. Подробнее...
| Заголовок: | #include <QPluginLoader> |
| qmake: | QT += core |
| Наследуется от: | QObject |
Примечание: Все функции в этом классе являются реентерабельными.
Свойства
- 1 свойство унаследовано от QObject
Публичные функции
| QPluginLoader(QObject *parent = Q_NULLPTR) | |
| QPluginLoader(const QString &fileName, QObject *parent = Q_NULLPTR) | |
| ~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() |
- 31 публичная функция унаследована от 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 = Q_NULLPTR)
Конструктор загрузчика плагинов с заданным parent.
QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = Q_NULLPTR)
Конструктор загрузчика плагинов с заданным parent, который загрузит плагин, указанный в fileName.
Для загрузки файл должен иметь корректное расширение, соответствующее платформе, например, .so на Unix, - .dylib на macOS и iOS, и .dll на Windows. Расширение можно проверить с помощью QLibrary::isLibrary().
См. также setFileName().
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.6/qpluginloader.html