Pregunta

Actualmente estoy escribiendo mi propio Qt plugin para ser utilizado en un Qt programa.Para identificar la versión del plugin de información, uso de los metadatos almacenados en el archivo JSON como el siguiente:

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

Para acceder a estos metadatos de información procedente de fuera de las clases del plugin (dentro de la Qt programa mundial), puedo volver a caer en ellos como los he definido el archivo JSON como este:

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

Es posible el uso de un estándar y la manera conveniente de acceder a exactamente la misma metadatos desde dentro del plugin (por ejemplo,el plugin constructor)?Por supuesto, yo podría utilizar el QPluginLoader (para lo cual tengo que saber el plugin ruta de acceso del archivo) o un archivo de readAll de un Objeto JSON.Sin embargo, ambos métodos dependen de saber la ruta exacta del plugin y el archivo JSON.Esto no es muy fiable para mí.

Pensó que no hay otro modo más normalizado?

¿Fue útil?

Solución

Usted no necesita saber la absoluta plugin ruta de acceso de archivo para QPluginLoader, por lo que estaría a salvo.

Sólo se puede pasar el nombre del plugin, y funcionará bien.También regresará el nombre de archivo completo del plugin, incluyendo la ruta de acceso completa para el plugin, si usted está leyendo el nombre de archivo de la espalda con el método correspondiente.Sea claro para la clase sobre la base de la información que puede obtenerse a partir de QCoreApplication::libraryPaths().

Aquí está la parte correspondiente de la documentación:

Cuando se carga el plugin, QPluginLoader búsquedas en el directorio actual y en todos los plugin lugares especificados por QCoreApplication::libraryPaths(), a menos que el nombre de archivo tiene una ruta de acceso absoluta.Después de cargar el plugin correctamente, el nombre del archivo() devuelve el nombre de archivo completo del plugin, incluyendo la ruta de acceso completa para el plugin, si uno de ellos fue dado en el constructor o pasado a setFileName().

Por lo tanto, lo que podríamos hacer, básicamente, es este:

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

donde foo puede ser cualquiera de las mencionadas claves.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top