Pergunta

Atualmente estou escrevendo meu próprio plugin Qt para ser usado em um programa Qt.Para identificar as informações da versão do plugin, eu uso os metadados armazenados no arquivo JSON como o seguinte:

{
    "type" :            "communication",
    "name" :            "USB-LIN-IB",
    "longname" :        "USB-LIN Communication",
    "version" :         "1.1",
    "dependencies" :    []
}

Para acessar essas informações de metadados de fora das classes do plugin (dentro do mundo do programa Qt), recorro a eles, pois defini o arquivo JSON assim:

Q_PLUGIN_METADATA(IID "org.plugins.communications.1" FILE "USBLINCommunication.json")

É possível usar uma maneira padronizada e conveniente de acessar exatamente os mesmos metadados de dentro do membro do plugin (por exemplo,o construtor do plugin)?Claro, eu poderia usar o QPluginLoader (para o qual preciso saber o caminho do arquivo do plugin) ou um arquivo readAll de um objeto JSON.No entanto, ambos os métodos dependem do conhecimento do caminho exato do plugin e do arquivo JSON.Isso não é muito confiável para mim.

Eu pensei que havia outra maneira mais padronizada?

Foi útil?

Solução

Você não precisa saber o caminho absoluto do arquivo do plugin para QPluginLoader, então você estaria seguro.

Você pode simplesmente passar o nome do plugin e ele funcionará bem.Ele também retornará o nome completo do arquivo do plugin, incluindo o caminho completo para o plugin se você estiver lendo o nome do arquivo com o método correspondente.Ficará claro para a turma com base nas informações que podem ser obtidas em QCoreApplication::libraryPaths().

Aqui está a parte correspondente de a documentação:

Ao carregar o plugin, QPluginLoader pesquisa no diretório atual e em todos os locais de plugin especificados por QCoreApplication::libraryPaths(), a menos que o nome do arquivo tenha um caminho absoluto.Depois de carregar o plug-in com sucesso, fileName() retorna o nome de arquivo totalmente qualificado do plug-in, incluindo o caminho completo para o plug-in, se algum tiver sido fornecido no construtor ou passado para setFileName().

Portanto, o que você poderia fazer basicamente é isto:

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

onde foo pode ser qualquer uma das chaves mencionadas acima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top