Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QML:检测到绑定循环,但未进行双重分配_Qt_Qml_Qt5 - Fatal编程技术网

Qt QML:检测到绑定循环,但未进行双重分配

Qt QML:检测到绑定循环,但未进行双重分配,qt,qml,qt5,Qt,Qml,Qt5,据我所知,当我试图相互分配两个属性时,会发生绑定循环。例如: CheckBox { checked: Settings.someSetting onCheckedChanged: { Settings.someSetting = checked; } } 但在我的场景中,我看不到这样的“双重任务”。我在此报告完整代码: 当您用鼠标单击时,您将看到警告: qrc:/main.qml:17:9:qml矩形:检

据我所知,当我试图相互分配两个属性时,会发生绑定循环。例如:

CheckBox {
    checked: Settings.someSetting                         
    onCheckedChanged: {
        Settings.someSetting = checked;
    }
}
但在我的场景中,我看不到这样的“双重任务”。我在此报告完整代码:

当您用鼠标单击时,您将看到警告:

qrc:/main.qml:17:9:qml矩形:检测到属性“旋转”的绑定循环


我看不出我的错误。我使用标志(bool变量)来控制代码的执行。我知道在这种情况下,我可以直接停止计时器,但实际的程序比这个示例更复杂。

绑定在以下行中:

rotation: {
    if (main.stopping)
    {
        main.spinning = false;
        main.stopping = false;
    }

    return timer.angle
}
旋转的变化是由main.stopping的变化触发的:假设change main.stopping是由mouseArea给出的,那么它将被称为旋转,但在这个里面有一个if,在这里你将切换回main.stopping,在这里他将调用旋转


如果QML中的某个属性更改了所有依赖于它的元素,则该绑定将更改为以下行:

rotation: {
    if (main.stopping)
    {
        main.spinning = false;
        main.stopping = false;
    }

    return timer.angle
}
旋转的变化是由main.stopping的变化触发的:假设change main.stopping是由mouseArea给出的,那么它将被称为旋转,但在这个里面有一个if,在这里你将切换回main.stopping,在这里他将调用旋转


如果QML中的一个属性更改了所有依赖于它的元素,那么它将更改

我认为您的设计是错误的:为什么要使用两个标志:旋转和停止?正如前面所说,这只是一个著名的最小可编译示例来说明我所面临的问题。我知道在这个简单的例子中,两个标志都不需要。但是它们帮助我触发我没有看到的绑定循环…绑定在以下行中:
if(main.stopping){main.spining=false;main.stopping=false;}
,旋转的变化是由main.stopping的变化触发的:假设change main.stopping是由mouseArea给出的,那么它将被称为旋转,但是在这个里面有一个if,在这里你将切换回main.stopping,他将在这里调用旋转。为什么会由
main.stopping的变化触发?它的状态不会影响返回值,
timer.angle
。如果它影响它,如果QML中的属性更改,则依赖它的所有元素都将更改。我认为您的设计是错误的:为什么要使用两个标志:旋转ans停止?正如前面所说,这只是一个著名的最小可编译示例来说明我所面临的问题。我知道在这个简单的例子中,两个标志都不需要。但是它们帮助我触发我没有看到的绑定循环…绑定在以下行中:
if(main.stopping){main.spining=false;main.stopping=false;}
,旋转的变化是由main.stopping的变化触发的:假设change main.stopping是由mouseArea给出的,那么它将被称为旋转,但是在这个里面有一个if,在这里你将切换回main.stopping,他将在这里调用旋转。为什么会由
main.stopping的变化触发?它的状态不影响返回值,
timer.angle
。如果它影响它,如果QML中的属性更改,则依赖它的所有元素都将更改。