Как использовать внутренние типы QML из внешних файлов QML? - PullRequest
0 голосов
/ 23 февраля 2019

В проекте qml на основе qrc у меня есть Internal.qml, который я могу использовать для декальцирования в формате Internal {}.

У меня также есть некоторые внешние / удаленные (произвольное расположение) External.qml, которые такженеобходимо иметь возможность использовать Internal.qml в декларативном формате Internal {}.

Однако, когда я пытаюсь загрузить External.qml, выдает ошибку, что Internal is not a type.

я пыталсядобавление qrc:/ к путям импорта, но это, похоже, не работает, как и несколько хаков директив импорта, которые я пробовал.

Не кажется разумным ожидать этого, когда приложение загружает внешний QMLфайл, который должен быть в состоянии использовать внутренние доступные типы QML.Какую директиву import мне нужно использовать, чтобы запустить ее?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Вы можете использовать оператор импорта каталога (это может быть абсолютный путь)

Если ваш Internal.qml путь равен qrc:/internal/Internal.qml, вы можете сделать следующее в External.qml:

import "qrc:/internal"

Internal {}

В качестве альтернативы вы можете определить свой собственный модуль с файлом qmldir и выполнить обычный импорт модуля.

Создать файл qrc:/internal/qmldir с таким содержимым:

module internal
Internal 1.0 Internal.qml

Затем вам необходимо добавить qrc:/ к вашим путям импорта (при импорте модуля механизм QML пытается открыть <import-path>/<module-name>/qmldir для каждого пути импорта в своем списке).

После этого вы можете сделать это с External.qml:

import internal 1.0

Internal {}
0 голосов
/ 23 февраля 2019

Одним из решений, хотя и несколько неоптимальным, является использование QQmlComponent:

  QQmlComponent c(engine);
  c.setData(readInTheRemoteQML, QUrl("qrc:/Test"));

Часть "qrc:/Test" позволяет внешнему файлу правильно разрешать внутренние типы.

Если указан URL-адрес, он используется для задания имени компонента и предоставления базового пути для элементов, разрешенных этим компонентом.

Это помогает, но я по-прежнему открыт дляболее «органический» раствор.

...