Первые шаги с QML
Создание документа QML
Документ QML определяет иерархию объектов с удобочитаемой и структурированной компоновкой. Каждый документ QML состоит из двух частей: раздела импорта и раздела объявления объекта. Типы и функциональность, наиболее часто используемые в пользовательских интерфейсах, предоставляются в импорте QtQuick.
Импорт и использование модуля Qt Quick
Для использования модуля Qt Quick документ QML должен его импортировать. Синтаксис импорта выглядит так:
import QtQuick 2.3
Теперь типы и функциональность, которые предоставляет Qt Quick, могут использоваться в документе QML!
Определение иерархии объектов
Раздел объявления объекта в документе QML определяет, что будет отображаться на визуальной сцене. Qt Quick предоставляет базовые строительные блоки для всех пользовательских интерфейсов, такие как объекты для отображения изображений и текста, а также для обработки пользовательского ввода.
Простой пример объявления объекта — это цветной прямоугольник с центрированным текстом:
Rectangle {
width: 200
height: 100
color: "red"
Text {
anchors.centerIn: parent
text: "Hello, World!"
}
} Это определяет иерархию объектов с корневым объектом Rectangle, который имеет дочерний объект Text. Поле parent объекта Text автоматически устанавливается в Rectangle, и аналогично, объект Text добавляется в свойство children объекта Rectangle объектом QML.
Объединение всего воедино
Типы Rectangle и Text, используемые в примере выше, оба предоставляются импортом QtQuick. Объединив импорт и объявление объекта, мы получим полный документ QML:
import QtQuick 2.3
Rectangle {
width: 200
height: 100
color: "red"
Text {
anchors.centerIn: parent
text: "Hello, World!"
}
} Если сохранить этот документ как "HelloWorld.qml", его можно загрузить и отобразить.
Создание и запуск проектов QML
Для отображения графической сцены, определенной документом QML, его можно загрузить с помощью Qt Creator. Для простых файлов пользовательского интерфейса, таких как этот, выберите в Qt Creator Файл > Создать новый файл или проект > Приложения > Qt Quick UI.
Нажатие на зеленую кнопку Запуск запускает приложение. Вы должны увидеть текст Hello, World! в центре красного прямоугольника.
Для получения дополнительной информации о создании и запуске проектов в Qt Creator посетите следующие страницы:
Создание приложений QML с элементами управления
В то время как Qt Quick предоставляет базовые графические элементы, Qt Quick Controls предоставляет готовые типы QML для использования в приложении.
Включение типа ApplicationWindow — хороший отправной пункт для создания приложений. Пользовательский интерфейс приложения имеет следующую базовую структуру:
В каждой области можно добавить и подключить различные элементы управления для формирования приложения. Например, следующий фрагмент кода — это базовое приложение, использующее предыдущую структуру:
//import related modules
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Window 2.2
//window containing the application
ApplicationWindow {
//title of the application
title: qsTr("Hello World")
width: 640
height: 480
//menu containing two menu items
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("&Open")
onTriggered: console.log("Open action triggered");
}
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
//Content Area
//a button in the middle of the content area
Button {
text: qsTr("Hello World")
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
}
} Приложение имеет две пункты меню и кнопку посередине. Нажатие на пункт меню Выход закрывает приложение.
Также доступны различные методы навигации и различные элементы управления, такие как кнопки и ползунки. В Qt Creator доступны следующие примеры, демонстрирующие различные элементы управления и макеты.
Не стесняйтесь копировать и вставлять фрагменты кода в это простое приложение "Hello, World!", чтобы увидеть, как работает QML.
Обработка пользовательского ввода
Одним из больших преимуществ использования QML для определения пользовательского интерфейса является то, что он позволяет разработчику пользовательского интерфейса определять, как приложение должно реагировать на события с помощью простых выражений JavaScript. В QML эти события называются сигналами, а эти сигналы обрабатываются обработчиками сигналов.
Например, рассмотрим следующий пример:
Rectangle {
width: 200
height: 100
color: "red"
Text {
anchors.centerIn: parent
text: "Hello, World!"
}
MouseArea {
anchors.fill: parent
onClicked: parent.color = "blue"
}
} Этот пример можно сохранить как "ClickableHelloWorld.qml" и запустить с помощью qmlscene. Всякий раз, когда пользователь нажимает в окне, прямоугольник будет меняться с красного на синий. Обратите внимание, что тип MouseArea также излучает сигнал clicked для событий касания, поэтому этот код также будет работать на мобильном устройстве.
Аналогичным образом, ввод с клавиатуры можно обработать с помощью простого выражения:
Rectangle {
width: 200
height: 100
color: "red"
Text {
anchors.centerIn: parent
text: "Hello, World!"
}
focus: true
Keys.onPressed: {
if (event.key == Qt.Key_Return) {
color = "blue";
event.accepted = true;
}
}
} При получении фокуса цвет можно изменить на синий при нажатии клавиши возврата.
Связывание свойств
Объекты и их свойства — основа графического интерфейса, определенного в документе QML. Язык QML позволяет связывать свойства различными способами, что позволяет создавать высокодинамичные пользовательские интерфейсы.
В следующем примере геометрия каждого дочернего Rectangle связана с геометрией родительского Rectangle. Если геометрия родительского Rectangle изменится, геометрия каждого дочернего Rectangle автоматически обновится из-за связей свойств.
Rectangle {
width: 400
height: 200
Rectangle {
width: parent.width / 2
height: parent.height
}
Rectangle {
width: parent.width / 2
height: parent.height
x: parent.width / 2
}
} Анимации
Свойства также могут быть динамически обновлены с помощью анимаций. Импорт QtQuick предоставляет различные типы анимаций, которые можно использовать для анимации изменений значения свойства. В следующем примере свойство анимируется, а затем отображается в области Text:
Rectangle {
color: "lightgray"
width: 200
height: 200
property int animatedValue: 0
SequentialAnimation on animatedValue {
loops: Animation.Infinite
PropertyAnimation { to: 150; duration: 1000 }
PropertyAnimation { to: 0; duration: 1000 }
}
Text {
anchors.centerIn: parent
text: parent.animatedValue
}
} Отображаемое значение будет периодически изменяться от 0 до 150.
Определение пользовательских типов QML для повторного использования
Одним из важнейших понятий в QML является повторное использование типов. Приложение, вероятно, будет иметь несколько визуальных типов, которые похожи (например, несколько кнопок), и QML позволяет определить такие вещи как повторно используемые пользовательские типы, чтобы свести к минимуму дублирование кода и максимизировать удобочитаемость.
Например, предположим, что разработчик определяет новый тип Button в файле Button.qml.
// Button.qml
import QtQuick 2.3
Rectangle {
width: 100; height: 100
color: "red"
MouseArea {
anchors.fill: parent
onClicked: console.log("Button clicked!")
}
} Этот тип теперь можно повторно использовать несколько раз в приложении, как показано ниже:
// application.qml
import QtQuick 2.3
Column {
Button { width: 50; height: 50 }
Button { x: 50; width: 100; height: 50; color: "blue" }
Button { width: 50; height: 50; radius: 8 }
} |
Таким образом, собираются и повторно используются модульные типы пользовательского интерфейса в приложении.
См. Атрибуты QML объектов для получения дополнительной информации о разработке собственных повторно используемых компонентов.
Куда двигаться дальше
Теперь, когда вы увидели QML в действии, вы готовы к следующему шагу. Следующая страница поможет вам в вашем путешествии с QML.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qmlfirststeps.html