У QML достаточно простой и нестрогий синтаксис, и это развращает и приводит к говнокоду. Поэтому важно соблюдать соглашение о стиле кода. Я придерживаюсь следующим правилам.
Очерёдность при описании элемента
1. id (если нужен);
2. объявление новых property и signal;
3. установка значений существующих property:
3.1
text
,
source
,
sourceComponent
(как самые главные свойства);
3.2 все остальные свойства;
3.3
x
,
y
,
width
,
height
,
anchors
;
3.4
Behavior
4. QML-элементы (наследники
Item
и
QtObjects
);
5.
states
и
transitions
;
5. слоты и обработка сигналов (
onClicked
,
Connections
), но кроме
Component.onCompleted
и
Component.onDestruction
;
6. функции;
7.
Component.onCompleted
и
Component.onDestruction
.
Обработка создания и разрушения элемента (пункт 7) перенесена в конец, т.к. это очень важный и часто используемый кусок кода. Вставляю пробельные строки между элементами, id, блоком свойств и т.д.
Если блочные свойства (anchors, fonts и др.) содержат больше двух строк, то описываю через фигурные скобки. Оформление тернарного оператора - дело вкуса, но я стараюсь разбивать на три строки.
Файловая структура
Fonts/
SomeFont.ttf
Fonts.qrc
Images/
SomeImage.svg
Images.qrc
QML/
Components/
SomeComponent.qml
qmldir
JavaScript/
SomeJsTool.js
Pages/
Page1/
ComponentForPage1.qml
qmldir
Page1.qml
Page2.qml
qmldir
Main.qml
Consts.qml
Colors.qml
qmldir
Qml.qrc
Translations/
Project_ru_RU.ts
Project_ru_RU.qm
Translations.qrc
По требованию Qt qml-файлы должны начинаться с заглавной буквы. Поэтому для единообразия я остальные файлы и каталоги (кроме qmldir) также задаю в CamelCase. Но это дело вкуса. Также важно, чтобы название файла и id в его описании совпадал.
Модули и import
Свои QML-файлы можно оформлять в виде модулей через qmldir. Также можно просто в import писать относительный путь (import "../../Components") до нужно каталога или абсолютный путь (import "qrc:/Components"). Моя практика показала, что если не писать библиотеку для сторонних людей, то лучше не использовать qml-модули. Т.к. и без них всё работает без конфликтов, и при этом не тратиться куча времени на дублировании имени файла в qmldir.
С++ и QML
Тут всё просто. В C++ должно быть вынесено максимум бизнес-логики. А её выполнение не должно блокировать GUI-поток.