QPluginLoader Class
QPluginLoaderクラスは、実行時にプラグインをロードします。詳細...
Header: | #include <QPluginLoader> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Inherits: | QObject |
- 継承メンバを含む全メンバのリスト
- QPluginLoaderはプラグインクラスに属しています。
注:このクラスの関数はすべてリエントラントです。
プロパティ
パブリック関数
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() |
静的パブリック・メンバー
QObjectList | staticInstances() |
QList<QStaticPlugin> | staticPlugins() |
関連する非メンバー
void | qRegisterStaticPluginFunction(QStaticPlugin plugin) |
詳しい説明
QPluginLoader はQt プラグインへのアクセスを提供します。Qt プラグインは共有ライブラリ(DLL)に格納され、QLibrary を使用してアクセスされる共有ライブラリと比較して、次のような利点があります:
- QPluginLoader は、プラグインがアプリケーションと同じバージョンの Qt に対してリンクされていることを確認します。
- QPluginLoaderは、C関数を手動で解決する代わりに、ルートコンポーネントオブジェクト(instance() )への直接アクセスを提供します。
QPluginLoaderオブジェクトのインスタンスは、プラグインと呼ばれる1つの共有ライブラリファイルを操作します。QPluginLoaderオブジェクトのインスタンスは、プラグインと呼ばれる1つの共有ライブラリ・ファイルに対して動作します。QPluginLoaderオブジェクトは、プラットフォームに依存しない方法でプラグイン内の機能へのアクセスを提供します。ロードするプラグインを指定するには、コンストラクタでファイル名を渡すか、setFileName()で設定します。
最も重要な関数は、プラグイン・ファイルを動的にロードするload ()、ロードが成功したかどうかをチェックするisLoaded ()、プラグインのルート・コンポーネントにアクセスするinstance ()です。instance() 関数は、プラグインがまだロードされていない場合、暗黙的にロードを試みます。QPluginLoaderの複数のインスタンスを使用して、同じ物理プラグインにアクセスすることができます。
一度ロードされたプラグインは、QPluginLoaderのすべてのインスタンスがアンロードされるか、アプリケーションが終了するまで、メモリ上に残ります。unload()を使用してプラグインをアンロードしようとすることができますが、QPluginLoaderの他のインスタンスが同じライブラリを使用している場合、呼び出しは失敗し、アンロードは、すべてのインスタンスがunload()を呼び出したときにのみ発生します。アンロードが行われる直前に、ルートコンポーネントも削除されます。
プラグインによってアプリケーションを拡張可能にする方法の詳細については、Qtプラグインの作成方法を参照してください。
アプリケーションがQtに対して静的にリンクされている場合、QPluginLoaderは使用できないことに注意してください。この場合、プラグインも静的にリンクする必要があります。静的にリンクされたアプリケーションで動的なライブラリをロードする必要がある場合は、QLibrary 。
QLibraryも参照して ください。
プロパティ Documentation
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も参照してください 。
メンバ関数のドキュメント
[explicit]
QPluginLoader::QPluginLoader(QObject *parent = nullptr)
与えられたparent でプラグインローダーを構築します。
[explicit]
QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent = nullptr)
fileName で指定されたプラグインをロードする、与えられたparent でプラグインローダーを構築します。
ローダブルであるためには、ファイルのサフィックスが、プラットフォームに応じてローダブルライブラリの有効なサフィックスでなければなりません。例えば、Unixでは.so
、 - macOSとiOSでは.dylib
、Windowsでは.dll
です。サフィックスはQLibrary::isLibrary() で確認できる。
setFileName()も参照のこと 。
[virtual noexcept]
QPluginLoader::~QPluginLoader()
QPluginLoader オブジェクトを破棄する。
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
このプラグインのメタデータを返します。メタデータは、プラグインのコンパイル時にQ_PLUGIN_METADATA() マクロを使用して json 形式で指定したデータです。
このメタデータは、プラグインを実際にロードすることなく、高速かつ安価な方法で問い合わせることができます。これにより、例えばプラグインの能力をそこに保存し、プラグインをロードするかどうかの決定をこのメタデータに依存させることが可能になります。
[static]
QObjectList QPluginLoader::staticInstances()
プラグインローダーが保持する静的なプラグインインスタンス(ルートコンポーネント)のリストを返します。
staticPlugins()も参照してください 。
[static]
QList<QStaticPlugin> QPluginLoader::staticPlugins()
プラグインローダーが保持するQStaticPluginsのリストを返します。この関数はstaticInstances() と似ていますが、QStaticPlugin にメタデータ情報が含まれている点が異なります。
staticInstances()も参照してください 。
bool QPluginLoader::unload()
プラグインをアンロードし、プラグインをアンロードできた場合はtrue
を返し、そうでない場合はfalse
を返します。
これはアプリケーションの終了時に自動的に行われるため、通常はこの関数を呼び出す必要はありません。
他のQPluginLoader インスタンスが同じプラグインを使用している場合、呼び出しは失敗し、アンロードはすべてのインスタンスがunload()を呼び出したときにのみ行われます。
ルート・コンポーネントを削除しようとしないでください。その代わりに、unload() が必要なときに自動的に削除してくれることを信じてください。
関連する非メンバー
void qRegisterStaticPluginFunction(QStaticPlugin plugin)
プラグインローダーで指定されたplugin を登録し、Q_IMPORT_PLUGIN() で使用されます。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。