プラグインのデプロイ
このトピックでは、Qt やアプリケーションの実行時に読み込むプラグイン・ライブラリのデプロイ方法について説明します。静的プラグインを使用する場合、プラグインコードは既にアプリケーションの実行ファイルの一部であり、別途デプロイする必要はありません。
プラグインディレクトリ
Qt では、アプリケーションが起動すると、アプリケーションの実行可能ディレクトリが、Qt がプラグインを検索するベースディレクトリになります。
例えば、Windows では、アプリケーションがC:\Program Files\MyApp
にあり、スタイルプラグインがある場合、Qt はC:\Program Files\MyApp\styles
を検索します。
アプリケーションの実行ファイルがどこにあるか調べるには、QCoreApplication::applicationDirPath() を参照してください。
Qt はQLibraryInfo::path(QLibraryInfo::PluginsPath) で指定されたディレクトリも探します。これは通常QTDIR/plugins
にあり、QTDIR
は Qt がインストールされているディレクトリです。Qt に他の場所を探させたい場合は、QCoreApplication::addLibraryPath() を呼び出すことで、必要な数のパスを追加できます。独自のパスを設定したい場合は、QCoreApplication::setLibraryPaths() を使用します。
あるいは、qt.conf
ファイルを使用して、Qt ライブラリにコンパイルされているハードコードされたパスを上書きすることもできます。詳細はqt.conf を参照してください。
もう1つの方法は、アプリケーションを実行する前にQT_PLUGIN_PATH
環境変数を設定することです。複数のパスをシステムパスの区切り文字で区切ることができます。設定すると、Qtはこの変数で指定されたパスにあるプラグインを探します。
注意: 他の Qt のインストールと干渉する可能性があるので、システム全体の環境変数としてQT_PLUGIN_PATH
をエクスポートしないでください。
プラグインの動的な読み込みと検証
プラグインをロードするとき、Qt ライブラリはプラグインをロードして使用できるかどうかを判断するために、いくつかのサニティチェックを行います。このサニティチェックにより、複数の Qt バージョンや設定を並行してインストールすることができます。
以下のルールが適用されます:
- マイナーバージョン番号の高い Qt ライブラリとリンクされたプラグインは、マイナーバージョン番号の低いライブラリからは読み込まれません。
例Qt 6.2.0 は Qt 6.3.0 でビルドされたプラグインをロードしません。例Qt 6.2.0 は Qt 6.1.0 でビルドされたプラグインをロードします。例Qt 6.2.0 は Qt 6.2.1 でビルドされたプラグインを読み込みます。 - メジャーバージョン番号の低い Qt ライブラリとリンクされたプラグインは、メジャーバージョン番号の高いライブラリからは読み込まれません。
例Qt 6.0.0 は Qt 5.15.0 でビルドされたプラグインをロードしません。
アプリケーションを拡張するためにプラグインをビルドする場合、プラグインがアプリケーションと同じように設定されていることを確認することが重要です。つまり、アプリケーションがリリースモードでビルドされている場合、プラグインもリリースモードでビルドする必要があります。Unixオペレーティングシステムを除いて、プラグインシステムはアプリケーションと異なるモードでビルドされたプラグインをロードしません。
プラグインのデバッグ
正しく書かれたプラグインが、それを使うように設計されたアプリケーションで動作するのを妨げるかもしれない問題がいくつかあります。これらの多くは、プラグインとアプリケーションのビルド方法の違いに関連しており、多くの場合、別々のビルドシステムやプロセスから発生します。
Qt がロードしようとする各プラグインの診断情報を得るには、QT_DEBUG_PLUGINS
環境変数を使用します。アプリケーションを起動する環境で、この変数を 0 以外の値に設定してください。
以下の表は、開発者がプラグインを作成する際に経験する一般的な問題の原因と、考えられる解決策を説明したものです。
問題 | 原因 | 解決方法 |
---|---|---|
アプリケーションで直接プラグインを開いても、プラグインが静かにロードされない。 Qt Widgets Designer のHelp|About Plugins ダイアログにプラグイン・ライブラリが表示されるが、各ライブラリの下にプラグインが表示されない。 | アプリケーションとプラグインが異なるモードでビルドされている。 | 実行ファイルと同じ構成でプラグインをビルドします。 |
© 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.