При использовании QML Qt Creator советует разделить дизайн и logi c на 2 файла QML, например File.qml и FileForm.ui.qml, первый для logi c, второй для дизайна. Он может отображать файл в визуальном дизайнере, только если он не содержит сложного кода, такого как вызовы функций или блоки кода {} (я использую Qt Creator 4.5.2, который поставляется с Ubuntu 18.04).
Теперь для вопрос: как перенести сложный код из ui.qml, когда я использую Repeater и его делегаты?
Пример:
My FileForm.ui.qml
выглядит так:
import "displayutils.js" as Utils
RowLayout {
property alias rr: rr
property alias tt: tt
Repeater {
id: rr
Text {
id: tt
text: "text: "+ Utils.fmtTemp(modelData.temp)+" / "+Utils.fmtPressure(modelData.pressure)
}
}
}
Я создаю его в File.qml
следующим образом:
File {
Component.onCompleted: {
rr.model = ... // some model from C++ code, does not matter.
}
}
Теперь Qt Creator не хочет открывать файл FileForm.ui.qml
из-за сложного форматирования текста, и мне нужно переместить его в File. qml. Как мне это сделать правильно? Что бы я ни пробовал, я теряю объект modelData из Repeater. Я пробовал разные варианты этого:
File {
tt.text = someFunction(modelData)
Component.onCompleted: {
rr.model = ... // some model from C++ code, does not matter.
}
}