Qt 检测到属性“的绑定循环”;宽度“;形象的

Qt 检测到属性“的绑定循环”;宽度“;形象的,qt,qml,qt5,qtquick2,Qt,Qml,Qt5,Qtquick2,假设我有这样一个组件: Rectangle { id: rec1 Rectangle { id: rec x:10;y:100; height:100; color: 'red' anchors { left: parent.left right: parent.right } Loader { id:loade

假设我有这样一个组件:

Rectangle {
    id: rec1

    Rectangle {
        id: rec
        x:10;y:100; height:100;
        color: 'red'
        anchors {
            left: parent.left
            right: parent.right
        }
        Loader {
            id:loader
            width: parent.width
            sourceComponent: comp
        }

    }

    Component {
        id: comp
        Rectangle {
            anchors {
                left: parent.left
                leftMargin: 1           // this line
                right: parent.right
            }
            height:img.height
            Image {
                id: img
                source: '/myimage.png'
                width: parent.width
                fillMode: Image.PreserveAspectFit
            }
        }
    }
}
控制台报告:

QML映像:检测到属性“宽度”的绑定循环

但如果我将comp leftMargin更改为
leftMargin:0
(不是1),则一切正常


这是一个bug还是我缺少的一些功能?

在我看来,您输入了一个错误:

width:100; height:100;
...
anchors {
    left: parent.left
    right: parent.right
}
通过这样做,您可以:

  • 明确设置矩形的宽度(设置为100)
  • 显式地将左侧锚定到父对象左侧(如果这只是一个锚定操作——可以),然后将右侧锚定到父对象的右侧(因此隐式地定义矩形的
    宽度

    这是矛盾。尝试解决它(例如,通过删除右锚定)并重新运行应用程序。

    在我看来,您输入了一个错误:

    width:100; height:100;
    ...
    anchors {
        left: parent.left
        right: parent.right
    }
    
    通过这样做,您可以:

  • 明确设置矩形的宽度(设置为100)
  • 显式地将左侧锚定到父对象左侧(如果这只是一个锚定操作——可以),然后将右侧锚定到父对象的右侧(因此隐式地定义矩形的
    宽度

    这是矛盾。尝试解决它(例如,通过删除右锚定)并重新运行应用程序。

    谢谢,你是对的,这是我的错。现在我用一个非常相似的例子来说明这个问题,你知道这个问题吗?我在Linux上使用Qt5.5.1 GCC 64x和QtQuick 2.3,不能重现你提到的问题。我在Mac OS X(10.11.2)上使用Qt5.5.1 Clang 6.0和QtQuick 2.5。结果似乎正确,但控制台会报告此错误消息。谢谢,谢谢,你是对的,这是我的错。现在我用一个非常相似的例子来说明这个问题,你知道这个问题吗?我在Linux上使用Qt5.5.1 GCC 64x和QtQuick 2.3,不能重现你提到的问题。我在Mac OS X(10.11.2)上使用Qt5.5.1 Clang 6.0和QtQuick 2.5。结果似乎正确,但控制台会报告此错误消息。无论如何谢谢你