プラグインのデプロイ
このトピックでは、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_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 ダイアログにプラグイン・ライブラリが表示されるが、各ライブラリの下にプラグインが表示されない。 | アプリケーションとプラグインが異なるモードでビルドされています。 | 実行ファイルと同じ設定でプラグインをビルドしてください。 |
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。