Всем привет, есть код на QML и JavaScript:
myfunctions.js
var r=0.1
var g=0.2
var b=0.3
function func(a)
{
a=a+0.1
if(a>1) a=0.1
console.debug("Current color:" + a)
return a;
}
myqml.qml
import QtQuick 2.0
import "myfunctions.js" as MYSCRIPT
Rectangle {
width: 360
height: 360
ListModel {
id: dataModel
}
Column {
anchors.margins: 10
anchors.fill: parent
spacing: 10
ListView {
id: view
width: parent.width
height: parent.height - button.height - parent.spacing
spacing: 10
model: dataModel
clip: true
delegate: Rectangle {
width: view.width
height: 40
color: Qt.rgba(MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.func(MYSCRIPT.b),0.7)
Text {
anchors.centerIn: parent
renderType: Text.NativeRendering
text: model.index
}
}
}
Rectangle {
id: button
width: 100
height: 40
anchors.horizontalCenter: parent.horizontalCenter
border {
color: "black"
width: 1
}
Text {
anchors.centerIn: parent
renderType: Text.NativeRendering
text: "Add"
}
MouseArea {
anchors.fill: parent
onClicked: dataModel.append({})
}
}
}
}
Этот код в ListView добавляет элементы в виде залитых цветом прямоугольников, вопрос заключается в следующем, в скрипте объявлены переменные r,g,b они соответствуют трем параметрам цвета, хотелось каждый новый прямоугольник с другим цветом для этого написана функция в скрипте которая меняет значение от 0.1 до 1, строка задания цвета Qt.rgba(MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.func(MYSCRIPT.b),0.7) передает переменные r,g,b в функцию func для каждого из трех компонент цвета, но в дебаг лог получаем такие данные с каждым новым нажатием :
Первое добавление прямоугольника
Current color:0.2
Current color:0.30000000000000004
Current color:0.4
Второе добавление прямоугольника
Current color:0.2
Current color:0.30000000000000004
Current color:0.4
Переменные не сохраняют свои значения до следующего вызова, как сделать что бы сохранялись выячесленные значения?
Здравствуйте, agg, Вы писали:
agg>Всем привет, есть код на QML и JavaScript:
agg>myfunctions.js
agg>agg>var r=0.1
agg>var g=0.2
agg>var b=0.3
agg>function func(a)
agg>{
agg> a=a+0.1
agg> if(a>1) a=0.1
agg> console.debug("Current color:" + a)
agg> return a;
agg>}
agg> color: Qt.rgba(MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.func(MYSCRIPT.b),0.7)
agg>
Я не силен в Джаваскрипте, но, насколько я помню, примитивные парметры передаются в нем по значению, а не по ссылке. Чтобы по ссылке, их можно, например, завернуть в обджект. Так что дело не в qml.
Здравствуйте, visual_wind, Вы писали:
_>Здравствуйте, agg, Вы писали:
agg>>Всем привет, есть код на QML и JavaScript:
agg>>myfunctions.js
agg>>agg>>var r=0.1
agg>>var g=0.2
agg>>var b=0.3
agg>>function func(a)
agg>>{
agg>> a=a+0.1
agg>> if(a>1) a=0.1
agg>> console.debug("Current color:" + a)
agg>> return a;
agg>>}
agg>> color: Qt.rgba(MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.func(MYSCRIPT.b),0.7)
agg>>
_>Я не силен в Джаваскрипте, но, насколько я помню, примитивные парметры передаются в нем по значению, а не по ссылке. Чтобы по ссылке, их можно, например, завернуть в обджект. Так что дело не в qml.
Догодался уже, но все равно спасибо )
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, visual_wind, Вы писали:
_>>Здравствуйте, agg, Вы писали:
agg>>>Всем привет, есть код на QML и JavaScript:
agg>>>myfunctions.js
agg>>>agg>>>var r=0.1
agg>>>var g=0.2
agg>>>var b=0.3
agg>>>function func(a)
agg>>>{
agg>>> a=a+0.1
agg>>> if(a>1) a=0.1
agg>>> console.debug("Current color:" + a)
agg>>> return a;
agg>>>}
agg>>> color: Qt.rgba(MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.func(MYSCRIPT.b),0.7)
agg>>>
_>>Я не силен в Джаваскрипте, но, насколько я помню, примитивные парметры передаются в нем по значению, а не по ссылке. Чтобы по ссылке, их можно, например, завернуть в обджект. Так что дело не в qml.
А>Догодался уже, но все равно спасибо )
Вот так работает: color: Qt.rgba(MYSCRIPT.r=MYSCRIPT.func(MYSCRIPT.r),MYSCRIPT.g=MYSCRIPT.func(MYSCRIPT.g),MYSCRIPT.b=MYSCRIPT.func(MYSCRIPT.b),0.7)