JavaScript и QML
От: agg  
Дата: 06.03.14 06:21
Оценка:
Всем привет, есть код на 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

Переменные не сохраняют свои значения до следующего вызова, как сделать что бы сохранялись выячесленные значения?
Re: JavaScript и QML
От: visual_wind  
Дата: 06.03.14 12:05
Оценка:
Здравствуйте, 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.
Re[2]: JavaScript и QML
От: Аноним  
Дата: 07.03.14 08:10
Оценка:
Здравствуйте, 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.


Догодался уже, но все равно спасибо )
Re[3]: JavaScript и QML
От: agg  
Дата: 07.03.14 08:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, 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)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.