Mas*_*ina 4 c++ qt json qt5 qtcore
我目前正在编写自己的Qt插件,用于Qt程序.为了识别插件版本信息,我使用存储在JSON文件中的元数据,如下所示:
{
"type" : "communication",
"name" : "USB-LIN-IB",
"longname" : "USB-LIN Communication",
"version" : "1.1",
"dependencies" : []
}
Run Code Online (Sandbox Code Playgroud)
要从插件类外部(在Qt程序世界中)访问这些元数据信息,我会依赖它们,因为我已经定义了这样的JSON文件:
Q_PLUGIN_METADATA(IID "org.plugins.communications.1" FILE "USBLINCommunication.json")
Run Code Online (Sandbox Code Playgroud)
是否可以使用标准化且方便的方法从插件成员(例如插件构造函数)中访问完全相同的元数据?当然,我可以使用QPluginLoader(我必须知道插件文件路径)或来自JSON对象的文件readAll.但是,这两种方法都依赖于知道插件和JSON文件的确切路径.这对我来说不太可靠.
我以为还有另一种更标准化的方式?
您不需要知道绝对插件文件路径QPluginLoader,因此您将是安全的.
你可以只传递插件名称,它会正常工作.它还将返回插件的完全限定文件名,如果您使用相应的方法读回文件名,则包括插件的完整路径.基于可以从中获得的信息,该类将是清楚的QCoreApplication::libraryPaths().
以下是文档的相应部分:
加载插件时,QPluginLoader将在当前目录和QCoreApplication :: libraryPaths()指定的所有插件位置中进行搜索,除非文件名具有绝对路径.成功加载插件后,fileName()返回插件的完全限定文件名,包括插件的完整路径(如果在构造函数中给出或传递给setFileName()).
因此,你基本上可以做的是:
myPluginLoader.metaData().value("MetaData").toObject().value("foo").toString()
Run Code Online (Sandbox Code Playgroud)
其中foo可以是你上面提到的键之一.
| 归档时间: |
|
| 查看次数: |
2077 次 |
| 最近记录: |