为图像的属性“宽度”检测到绑定循环

Posted

技术标签:

【中文标题】为图像的属性“宽度”检测到绑定循环【英文标题】:Binding loop detected for property "width" of Image 【发布时间】:2016-01-19 06:54:26 【问题描述】:

假设我有一个这样的组件:

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),一切正常

这是一个错误还是我缺少某些功能?

【问题讨论】:

【参考方案1】:

在我看来你打错了:

width:100; height:100;
...
anchors 
    left: parent.left
    right: parent.right

通过这样做你:

    明确设置矩形width(到100)。 明确地将左侧锚定到父母左侧(如果这只是一个锚定操作 - 没关系)然后 - 将右侧锚定到父母的右侧(所以你隐式定义矩形的width)。

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

【讨论】:

谢谢,你说得对,是我的错。现在我做了一个非常相似的例子来说明这个问题,关于这个问题有什么想法吗? 我在 Linux 上使用 Qt 5.5.1 GCC 64x 和 QtQuick 2.3,无法重现您提到的问题。 我在 Mac OS X (10.11.2) 上使用 Qt 5.5.1 Clang 6.0 和 QtQuick 2.5。结果似乎是正确的,但是控制台报告了这个错误信息。还是谢谢

以上是关于为图像的属性“宽度”检测到绑定循环的主要内容,如果未能解决你的问题,请参考以下文章

QML ListView:检测到属性“高度”的绑定循环

标签上的绑定循环警告

QML GroupBox:检测到属性“implicitWidth”的绑定循环

QML:在没有双重分配的情况下检测到绑定循环

如何分析“绑定循环”

Angular 7,双向数据绑定