检测到 属性 "text" 的绑定循环

Binding loop detected for property "text"

我的实现是跟踪我是否已经放置了点 。我正在努力实现以下目标: A • D • G • J • M • P • S • V • Z。用于检查的 属性 绑定,不知何故它不想回到 0。我也尝试使用本地 var,但它总是 0 或 1。我该如何解决这个问题?我收到以下错误:Binding loop detected for property "text"

import QtQuick 2.15
import QtQuick.Window 2.15
Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    Rectangle {
        id: root
        visible: true
        anchors.fill: parent


        property string letters: "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        property int check: 0

        readonly property real dx: 20

          function midpoint(idx) {
            return 20 + idx * root.dx;
          }

        function newLetters(index) {
              if(root.letters[index] === "A"){
                  root.check = 0
                  return true
              }
              if(root.letters[index] === "D"){
                  root.check  = 0
                  return true
              }
              if(root.letters[index] === "G"){
                  root.check  = 0
                  return true
              }
              if(root.letters[index] === "J"){
                  root.check  = 0
                  return true
              }
              if(root.letters[index] === "M"){
                  root.check = 0
                  return true
              }
              if(root.letters[index] === "P"){
                  root.check = 0
                  return true
              }
              if(root.letters[index] === "S"){
                  root.check = 0
                  return true
              }
              if(root.letters[index] === "V"){
                  root.check  = 0
                  return true
              }
              if(root.letters[index] === "Z"){
                  root.check  = 0
                  return true
              }
              else {
                root.check  = root.check + 1
              }
          }

        Repeater {
            model: 26
            Text {
                anchors.horizontalCenter: parent.left
                anchors.horizontalCenterOffset: root.midpoint(index)
                anchors.verticalCenter: parent.verticalCenter

                text: root.newLetters(index) ? root.letters[index] : (root.check === 0  ? " • " : "")
            }
        }
    }
}

是的,通过改变root.check变量,QQmlEngine会re-evaluate所有依赖的绑定,包括newLetters函数本身,从而导致绑定循环。

我一直在看你最近的问题(想知道 end-goal 是什么),我认为你应该改变你的 newLetters 函数,return 实际想要的文本而不是条件:

function newLetters(index) {
    if(index < 24) //below Y, everything is regular
    {
        if(index % 3 == 0)
            return root.letters[index]
        if(index % 3 == 1)
            return " ° "
    }
    else if(index == 24) //Y
    {
        return ""
    }
    else if(index == 25) //Z
    {
        return root.letters[index]
    }
    
    return ""
}