Конвенции кодирования 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) }
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qml-codingconventions.html