Импорт каталогов документов QML
Локальный каталог файлов QML может быть импортирован без дополнительной настройки или конфигурации. Дистанционный каталог файлов QML также может быть импортирован, но требует наличия файла списка каталога qmldir. Локальный каталог может необязательно содержать файл списка каталога qmldir для определения имён типов, которые должны предоставляться клиентам, импортирующим каталог, и для указания JavaScript-ресурсов, которые должны быть доступны импортирующим приложениям.
Импорт локальных каталогов
Любой файл QML в локальной файловой системе может импортировать локальный каталог, используя оператор импорта, который ссылается на абсолютный или относительный путь к файловой системе каталога, позволяя файлу использовать типы объектов объектов, определённые в этом каталоге.
Если локальный каталог содержит файл списка каталога qmldir, типы будут доступны с именами типов, указанными в файле qmldir; в противном случае они будут доступны с именами типов, полученными из имён файлов документов QML. Если файл qmldir не указан в каталоге, будут экспонированы только имена файлов, начинающиеся с заглавной буквы и заканчивающиеся на ".qml".
Пример
Рассмотрим следующую структуру каталога проекта QML. Под основным каталогом myapp находятся набор общих компонентов пользовательского интерфейса в подкаталоге с именем 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 следующий:
| Команда | Синтаксис | Описание |
|---|---|---|
| Объявление типа объекта | <TypeName> <FileName> | Объявление типа объекта позволяет документу QML быть экспонированным с заданным <TypeName>.Пример: RoundedButton RoundedBtn.qml |
| Объявление внутреннего типа объекта | internal <TypeName> <FileName> | Объявление внутреннего типа объекта позволяет зарегистрировать документ QML как тип, который становится доступным только для других документов QML, содержащихся в импорте каталога. Внутренний тип не будет доступен клиентам, которые импортируют каталог. Пример: internal HighlightedButton HighlightedBtn.qml |
| Объявление JavaScript-ресурса | <Identifier> <FileName> | Объявление 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.1/qtqml-syntax-directoryimports.html