|
|||||||
Создание собственных элементов в QML и импортирование одного файла в другой
Время создания: 16.01.2018 17:09
Текстовые метки: qml, элемент, в отдельном файле, импортирование, подключение, файл
Раздел: Компьютер - Программирование - Язык C++ (Си++) - Библиотека Qt - QML - Краткая памятка по QML
Запись: xintrea/mytetra_syncro/master/base/1516111779ewl3evenn7/text.html на raw.github.com
|
|||||||
|
|||||||
В QML имеется возможность создавать собственные экранные элементы, и использовать их как элементы встроенных QML-типов. Для этого нужно просто создать файл с именем, начинающимся с большой буквы, и разрешением *.qml. Внутри файла надо прописать основной элемент (обычно с типом Item, но может быть и что-нибудь другое, например Rectangle) и наполнить его нужными элементами. Вот пример файла с именем GameArea.qml. Соответственно, тип элемента будет называться GameArea, хоть нигде непосредственно в QML-коде это не прописывается: import QtQuick 2.0 Item { property string aboutText: "This is super game" property color fieldColor: "blue" width: (parent.width/2)*0.8 height: (parent.width/2)*0.8 Rectangle { anchors.fill: parent color: fieldColor Text { anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter text: aboutText } } } Если qml-файл с новым типом элемента находится в том же каталоге, что и файл, из которого происходит вызов, то чтобы начать пользоваться данным типом, нужно просто начать этим типом пользоваться. Никаких директив подключения import писать не требуется. То есть, просто в основном *.qml-файле можно написать: GameArea { x: 0 y: 0 } И элемент будет работать. Но если файл с новым типом находится в какой-нибудь поддиректории, то, чтобы его использовать, нужно прописывать импорт из данной поддиректории. Делается это так. Предположим, что из файла main.qml нужно воспользоваться типом MyButton. Файл MyButton.qml находится в поддиректории elements. Тогда, в начале файла main.qml надо прописать: import "./elements" И все *.qml-файлы из директории elements будут подключены в текущем qml-файле. После чего в коде файла main.qml можно использовать тип MyButton. Директива import способна так же импортировать файлы, расположенные в отдельном каталоге, в отдельное пространство имен, и таким образом подключаемые типы можно рассматривать как отдельный модуль. Например, в поддиректории elements лежат файлы:
Тогда эти файлы можно подключить такой командой: import "./elements" as MyElements И при таком подключении использовать типы можно только через указание пространства имен, вот так: MyElements.MyCheckBox { text: "Enable network connect" } Таким образом производится как бы группировка подключаемых из директории типов в модуль, и эти типы не попадают в глобальное пространство имен. Такой механизм хорошо изолирует одни типы от других, и даже если случайно в разных подкаталогах окажутся файлы (а, следовательно, и типы) с одинаковыми именами, то ничего плохого не произойдет: просто они окажутся каждый в своем модуле (т .е. в своем пространстве имен). Внимание! Все *.qml-файлы и директории с *.qml-файлами нужно обязательно помещать в файл ресурсов. Иначе после компиляции (которая пройдет без ошибок) результирующий бинарник не будет иметь необходимый для его работы соответствующий QML-код. Об этом станет известно только в момент исполнения программы, и соответствующая ошибка будет выглядеть примерно так: QQmlApplicationEngine failed to load component qrc:/main.qml:3 "./elements": no such directory Директива import - очень многофункциональная директива и имеет несколько вариантов использования. Подробности в официальной документации. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|