QTプラグインクラス内の自分のメタデータを読む
質問
現在、QTプログラムで使用する独自のQTプラグインを書いています。プラグインバージョン情報を識別するには、次のようにJSONファイルに保存されているメタデータを使用します。
{
"type" : "communication",
"name" : "USB-LIN-IB",
"longname" : "USB-LIN Communication",
"version" : "1.1",
"dependencies" : []
}
.
プラグインクラスの外側から(QTプログラムの世界で)これらのメタデータ情報にアクセスするには、このようなJSONファイルを定義したときに転倒します。
Q_PLUGIN_METADATA(IID "org.plugins.communications.1" FILE "USBLINCommunication.json")
.
プラグインメンバー内から正確に同じメタデータにアクセスするための標準化された便利な方法を使用することは可能です(例えばプラグインコンストラクタ)? もちろん、QPluginLoader(プラグインファイルパスを知る必要がある)またはJSONオブジェクトからのファイル読み取りエッチを使用することもできます。ただし、プラグインとJSONファイルの正確なパスを知ることに依存しています。これは私にとってはあまり信頼できません。
もう一つの標準化された方法があると思った?
解決
QPluginLoader
の絶対プラグインファイルパスを知る必要はありませんので、安全になるでしょう。
プラグイン名を渡すことができ、それはうまく機能します。また、ファイル名を対応するメソッドに戻す場合は、プラグインへのフルパスなど、プラグインの完全なパス名も返します。 QCoreApplication::libraryPaths()
から入手できる情報に基づいてクラスには明らかです。
これはのドキュメント:
の対応する部分です。プラグインをロードするとき、QPluginLoaderは現在のディレクトリを検索し、ファイル名に絶対パスを持たない限り、QCoreApplication :: LibraryPaths()で指定されたすべてのプラグイン場所で検索します。プラグインを正常にロードした後、filename()は、コンストラクタで指定された場合、またはsetFileName()に渡された場合、プラグインへのフルパスを含む、プラグインの完全修飾ファイル名を返します。
したがって、あなたが基本的にできることはこれです:
myPluginLoader.metaData().value("MetaData").toObject().value("foo").toString()
.
ここで、Fooは上記のキーのどちらかになることができます。