我目前正在编写自己的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")
.

是否可以使用标准化和方便的方式来从插件成员内(例如插件构造函数)的完全相同的元数据? 当然,我可以使用Qpluginopler(我必须知道插件文件路径)或来自JSON对象的文件读取。但是,这两种方法都依赖于了解插件和JSON文件的确切路径。这对我来说不是很可靠。

我认为还有另一种标准化的方式吗?

有帮助吗?

解决方案

您不需要知道生成的绝对插件文件路径for for QPluginLoader,因此您将是安全的。

你可以通过插件名称,它将正常工作。如果使用相应的方法读取文件名,它还将返回插件的完全限定文件名,包括插件的完整路径。基于可以从QCoreApplication::libraryPaths()获得的信息清除该类。

这是文档

的相应部分

加载插件时,qpluginloader在当前目录中搜索,并在QcoreApplication :: libraryPaths()指定的所有插件位置中,除非文件名具有绝对路径。成功加载插件后,FileName()返回插件的完全限定文件名,如果在构造函数中给出或传递给SetFileName()时,则包括插件的完整路径。

因此,基本上你可以做的是:

myPluginLoader.metaData().value("MetaData").toObject().value("foo").toString()
.

其中foo可以是您的上述键。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top