Почему я не могу распечатать обновленный счет? - PullRequest
1 голос
/ 14 июня 2019

У меня есть оценка, указанная ниже, для печати на экране

property int score: 0

Text {
    id: score1
    text: "Score: "+ score
    anchors.bottom: grid.top
    font.pointSize: 20
    color: "red"
}

и эта модель списка для доступа и изменения квадратных цветов и текстовых значений в сетке

property variant colorArray: ["cyan","red","white"]
ListModel {
    id: dummyModel

    ListElement {
        squareColor: "white"
        txt: 0
    }
    ListElement {
        squareColor: "white"
        txt: 0
    }
    ListElement {
        squareColor: "white"
        txt: 0
    }
    ListElement {
        squareColor: "white"
        txt: 0
    }
}

Timer { 
    // to change square colors randomly
    id: alfa
    interval: 2000; running: true; repeat: true
    onTriggered: {
        for (var i=0;i<dummyModel.count;i++) {                
            dummyModel.setProperty(i,"squareColor",colorArray[Math.floor(Math.random()*3)])
        }
    }
}

Timer { 
    // to change score values in grid element randomly
    id: beta
    interval: 2000; running: true; repeat: true
    onTriggered: {
        for (var i=0;i<dummyModel.count;i++) {
            var sc = Math.floor(Math.random()*20) // random value from 0 to 20
            dummyModel.setProperty(i,"txt",sc) // score in each square
        }
    }
}

и эта сетка содержит цветные квадраты, когда квадрат щелкается, а цвет - голубой, значение должно обновляться числом в текстовом поле tttt

Grid{
    id: grid
    rows: 2
    columns:2
    spacing: 5
    anchors.centerIn: parent
    Repeater{
        id: gridRect
        model: dummyModel // from a list element model 
        Rectangle{
            id: rect
            width: 50
            height: width
            color: "cyan" 
            radius: 10
            Text {
                id: tttt
                anchors.centerIn: parent
                color: "lightBlue"
                text : txt
            }
            MouseArea{
                anchors.fill: parent
                onClicked: {
                    if (rect.color == "cyan")
                        score = score + tttt.text
                    else if (rect.color == "red")
                        score = score - tttt.text
                }
            }
        }
    }
}

но оценка не может быть обновлена ​​при клике, вместо этого я получаю эту ошибку / предупреждение:

<Unknown File>: Can't assign to existing role 'txt' of different type [Number -> String]

почему это?

1 Ответ

0 голосов
/ 14 июня 2019

Компонент Text может получать данные любого типа: строку, число и т. Д. И пытаться преобразовать их в строку, в вашем случае, когда вы используете txt.text, вы получаете эту преобразованную строку. Таким образом, есть 2 решения, которые преобразуют строку в число, или лучше не использовать значение компонента Text, а свойство модели:

// ...
Rectangle{
    id: rect
    width: 50
    height: width
    color: model.squareColor
    radius: 10
    Text {
        id: tttt
        anchors.centerIn: parent
        color: "lightBlue"
        text : model.txt
    }
    MouseArea{
        anchors.fill: parent
        onClicked: {
            if (model.squareColor === "cyan")
                score = score + model.txt
            else if (model.squareColor === "red")
                score = score - model.txt
        }
    }
}
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...