Конвенции кодирования QML
В этом документе содержатся конвенции кодирования QML, которым мы следуем в нашей документации и примерах, и рекомендуем следовать им другим.
Объявления QML-объектов
В нашей документации и примерах атрибуты QML-объектов всегда структурированы в следующем порядке:
- id
- объявления свойств
- объявления сигналов
- функции JavaScript
- свойства объекта
- дочерние объекты
- состояния
- переходы
Для лучшей читаемости мы разделяем эти части пустой строкой.
Например, гипотетический QML-объект photo будет выглядеть так:
Rectangle {
id: photo // id on the first line makes it easy to find an object
property bool thumbnail: false // property declarations
property alias image: photoImage.source
signal clicked // signal declarations
function doSomething(x) // javascript functions
{
return x + photoImage.width
}
color: "gray" // object properties
x: 20; y: 20; height: 150 // try to group related properties together
width: { // large bindings
if (photoImage.width > 200) {
photoImage.width;
} else {
200;
}
}
Rectangle { // child objects
id: border
anchors.centerIn: parent; color: "white"
Image { id: photoImage; anchors.centerIn: parent }
}
states: State { // states
name: "selected"
PropertyChanges { target: border; color: "red" }
}
transitions: Transition { // transitions
from: ""; to: "selected"
ColorAnimation { target: border; duration: 200 }
}
} Сгруппированные свойства
Если используется несколько свойств из группы свойств, рассмотрите использование групповой нотации вместо точечной нотации, если это улучшает читаемость.
Например, это:
Rectangle {
anchors.left: parent.left; anchors.top: parent.top; anchors.right: parent.right; anchors.leftMargin: 20
}
Text {
text: "hello"
font.bold: true; font.italic: true; font.pixelSize: 20; font.capitalization: Font.AllUppercase
} можно записать так:
Rectangle {
anchors { left: parent.left; top: parent.top; right: parent.right; leftMargin: 20 }
}
Text {
text: "hello"
font { bold: true; italic: true; pixelSize: 20; capitalization: Font.AllUppercase }
} Списки
Если список содержит только один элемент, мы обычно опускаем квадратные скобки.
Например, для компонента очень часто бывает только одно состояние.
В этом случае вместо:
states: [
State {
name: "open"
PropertyChanges { target: container; width: 200 }
}
] мы напишем так:
states: State {
name: "open"
PropertyChanges { target: container; width: 200 }
} Код JavaScript
Если скрипт представляет собой единственное выражение, мы рекомендуем писать его в строку:
Rectangle { color: "blue"; width: parent.width / 3 } Если скрипт состоит всего из пары строк, мы обычно используем блок:
Rectangle {
color: "blue"
width: {
var w = parent.width / 3
console.debug(w)
return w
}
} Если скрипт состоит более чем из пары строк или может быть использован различными объектами, мы рекомендуем создать функцию и вызвать ее так:
function calculateWidth(object)
{
var w = object.width / 3
// ...
// more javascript code
// ...
console.debug(w)
return w
}
Rectangle { color: "blue"; width: calculateWidth(parent) } Для длинных скриптов мы поместим функции в отдельный файл JavaScript и импортируем его так:
import "myscript.js" as Script
Rectangle { color: "blue"; width: Script.calculateWidth(parent) } Если код длиннее одной строки и, следовательно, находится в блоке, мы используем точки с запятой для обозначения конца каждой инструкции:
MouseArea {
anchors.fill: parent
onClicked: {
var scenePos = mapToItem(null, mouseX, mouseY);
console.log("MouseArea was clicked at scene pos " + scenePos);
}
}
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qml-codingconventions.html