このページでは

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 オブジェクトのインスタンスは、単一の共有ライブラリファイル(これをプラグインと呼びます)に対して動作します。これにより、プラットフォームに依存しない方法でプラグインの機能にアクセスできます。ロードするプラグインを指定するには、コンストラクタでファイル名を渡すか、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)

指定されたparent を使用して、fileName で指定されたプラグインを読み込むプラグインローダーを構築します。

ファイルがロード可能であるためには、そのファイル拡張子がプラットフォームに応じたロード可能なライブラリの有効な拡張子でなければなりません。例えば、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() によって使用されます。

© 2026 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.