QPluginLoader Class

QPluginLoaderクラスは、実行時にプラグインをロードします。詳細...

ヘッダー #include <QPluginLoader>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承: 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()

静的パブリックメンバー

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も参照して ください。

プロパティのドキュメント

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() が明示的に呼び出されない限り、プラグインはアプリケーションが終了するまでメモリ内に留まる。

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

このプラグインのメタデータを返します。メタデータは、プラグインをコンパイルする際に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() が必要なときに自動的に削除してくれることを信じてください。

instance() およびload()も参照

関連する非メンバー

void qRegisterStaticPluginFunction(QStaticPlugin plugin)

指定されたplugin をプラグイン・ローダーに登録し、Q_IMPORT_PLUGIN() で使用する。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.