题
我目前正在编写自己的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可以是您的上述键。
不隶属于 StackOverflow