Чтение собственных метаданных в классе плагинов QT

StackOverflow https://stackoverflow.com//questions/23034047

  •  21-12-2019
  •  | 
  •  

Вопрос

Я в настоящее время пишу свой собственный плагин 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")
.

Возможно ли использовать стандартизированный и удобный способ доступа к тому же метаданным из элемента плагина (например, конструктор плагинов)? Конечно, я мог бы либо использовать QplugInloader (для которого я должен знать путь к файлу плагинов) или файловый решал, с объекта JSON.Однако оба метода полагаются на знание точного пути плагина и файла JSON.Это не очень надежно для меня.

Я думал, что есть еще один стандартизированный путь?

Это было полезно?

Решение

Вам не нужно знать абсолютный пункт файла плагинов для QPluginLoader, поэтому вы будете в безопасности.

Вы можете просто пройти имя плагина, и он будет работать нормально. Он также вернет полностью квалифицированное имя файла плагина, включая полный путь к плагину, если вы читаете имя файла обратно с соответствующим методом. Для класса будет ясно, на основании информации, которая может быть получена из QCoreApplication::libraryPaths().

Вот соответствующая часть Документация :

При загрузке плагина QPlugInloader поиск в текущем каталоге и во всех местах плагина, указанные в QCOREAPLICALICATIONAL :: liblicPaths (), если имя файла не имеет абсолютного пути. После успешного загрузки плагина имени файла () возвращает полностью квалифицированное имя файла плагина, включая полный путь к плагину, если он был приведен в конструкторе или передан на SetFileName ().

Следовательно, что вы могли бы сделать в основном, это:

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

Где foo может быть одним из вышеупомянутых клавиш.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top