Domanda

Attualmente sto scrivendo il mio plugin Qt da utilizzare in un programma QT.Per identificare le informazioni sulla versione del plugin, utilizzo i metadati come memorizzati nel file JSON come quanto segue:

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

Per accedere a queste informazioni di metadati dall'esterno delle classi del plugin (all'interno del mondo del programma Qt), mi ritrovo su di loro come ho definito il file JSON come questo:

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

È possibile utilizzare un modo standardizzato e conveniente per accedere esattamente gli stessi metadati all'interno del membro del plugin (ad esempio il costruttore del plugin)? Naturalmente, potrei usare il qplugnalloader (per il quale devo conoscere il percorso del file del plugin) o un file readall da un oggetto JSON.Tuttavia, entrambi i metodi si basano sulla conoscenza del percorso esatto del plugin e del file JSON.Questo non è molto affidabile per me.

Ho pensato che ci sia un altro modo più standardizzato?

È stato utile?

Soluzione

Non è necessario conoscere il percorso del file del plugin assoluto per QPluginLoader, quindi sarai sicuro.

Puoi semplicemente superare il nome del plugin e funzionerà bene. Restituirà anche il nome del file completamente qualificato del plugin, incluso il percorso completo al plugin se si sta leggendo il nome del file con il metodo corrispondente. Sarà chiaro per la classe in base alle informazioni che possono essere ottenute da QCoreApplication::libraryPaths().

Ecco la parte corrispondente di La documentazione :

.

Quando si carica il plugin, QpluGinLoader effettua ricerche nella directory corrente e in tutte le posizioni del plug-in specificate da QCoReapplication :: libreriaPaths (), a meno che il nome del file non abbia un percorso assoluto. Dopo aver caricato il plugin, il nome file () restituisce il nome del file completamente qualificato del plugin, incluso il percorso completo del plugin se uno è stato dato nel costruttore o passato a setfileName ().

Pertanto, cosa potresti fare in fondo questo:

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

dove foo può essere uno dei tuoi commenti sopra menzionati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top