Импорт каталогов QML-документов
Местный каталог QML-файлов может быть импортирован без дополнительной настройки или конфигурации. Дистанционный каталог QML-файлов также может быть импортирован, но для этого требуется наличие файла описания каталога qmldir. Местный каталог может необязательно содержать файл описания каталога qmldir для определения имен типов, которые должны предоставляться клиентам, импортирующим каталог, и для указания JavaScript-ресурсов, которые должны быть доступны импортерам.
Импорт локальных каталогов
Любой QML-файл в локальной файловой системе может импортировать локальный каталог, используя оператор импорта, который ссылается на абсолютный или относительный путь к файловой системе каталога, что позволяет файлу использовать типы объектов объектов, определённых в этом каталоге.
Если локальный каталог содержит файл описания каталога qmldir, типы будут доступны с именами типов, указанными в файле qmldir; в противном случае они будут доступны с именами типов, производными от имён файлов QML-документов. Если в каталоге не указан файл qmldir, в качестве типов будут доступны только имена файлов, начинающиеся с заглавной буквы и заканчивающиеся на ".qml".
Пример
Рассмотрим следующую структуру каталогов QML-проекта. В корневом каталоге myapp находится набор общих UI-компонентов в подкаталоге mycomponents, а основной код приложения находится в подкаталоге main, как показано ниже:
myapp
|- mycomponents
|- CheckBox.qml
|- DialogBox.qml
|- Slider.qml
|- main
|- application.qml Файл main/application.qml может импортировать каталог mycomponents с помощью относительного пути к этому каталогу, позволяя использовать типы QML-объектов, определённых в этом каталоге:
import "../mycomponents"
DialogBox {
CheckBox {
// ...
}
Slider {
// ...
}
} Каталог может быть импортирован в квалифицированное локальное пространство имён, в этом случае использование любых типов, предоставляемых в каталоге, должно быть квалифицировано:
import "../mycomponents" as MyComponents
MyComponents.DialogBox {
// ...
} Возможность импорта локального каталога удобна в таких случаях, как наборы компонентов в приложении и прототипирование приложений, хотя любой код, импортирующий такие модули, должен обновить соответствующие операторы импорта import в случае перемещения каталога модуля в другое место. Этого можно избежать, если использовать QML-модули, так как установленный модуль импортируется со строковым идентификатором, а не с путём к файловой системе.
Дистанционно расположенные каталоги
Каталог QML-файлов также может быть импортирован из удалённого расположения, если каталог содержит файл описания каталога qmldir.
Например, если каталог myapp в предыдущем примере размещён по адресу "http://www.my-example-server.com", а каталог mycomponents содержит файл qmldir, определённый следующим образом:
CheckBox CheckBox.qml DialogBox DialogBox.qml Slider Slider.qml
Тогда этот каталог может быть импортирован с помощью URL-адреса удалённого каталога mycomponents:
import "http://www.my-example-server.com/myapp/mycomponents"
DialogBox {
CheckBox {
// ...
}
Slider {
// ...
}
} Обратите внимание, что при импорте каталога через сеть файл может получить доступ только к QML- и JavaScript-файлам, указанным в файле qmldir в каталоге.
Предупреждение: При импорте каталогов с удалённого сервера разработчики должны быть осторожны и загружать каталоги только из надёжных источников, чтобы избежать загрузки вредоносного кода.
Файлы описания каталога qmldir
Файл описания каталога qmldir отличается от файла определения модуля qmldir. Файл описания каталога qmldir позволяет быстро и легко обмениваться группой QML-документов, но не определяет пространство имён типов, в которое регистрируются типы QML-объектов, определённых документами, и не поддерживает версионирование этих типов QML-объектов.
Синтаксис файла описания каталога qmldir следующий:
| Команда | Синтаксис | Описание |
|---|---|---|
| Объявление типа объекта | <ИмяТипа> <ИмяФайла> | Объявление типа объекта позволяет QML-документу быть доступным с заданным <TypeName>.Пример: RoundedButton RoundedBtn.qml |
| Объявление внутреннего типа объекта | internal <ИмяТипа> <ИмяФайла> | Объявление внутреннего типа объекта позволяет QML-документу быть зарегистрированным как тип, доступный только другим QML-документам, содержащимся в импорте каталога. Внутренний тип не будет доступен клиентам, импортирующим каталог. Пример: internal HighlightedButton HighlightedBtn.qml |
| Объявление JavaScript-ресурса | <Идентификатор> <ИмяФайла> | Объявление JavaScript-ресурса позволяет JavaScript-файлу быть доступным с заданным идентификатором. Пример: MathFunctions mathfuncs.js |
Локальный каталог файловой системы может необязательно включать файл qmldir. Это позволяет движку экспонировать только определённые QML-типы клиентам, которые импортируют каталог. Кроме того, JavaScript-ресурсы в каталоге не экспонируются клиентам, если они не объявлены в файле qmldir.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qtqml-syntax-directoryimports.html