[Qt] QML中一些容易犯错的点

属性赋值会导致属性绑定失效

Rectangle{
    id:rec
    ...
    width : 2*height
    ...
}

Timer{
    ...
    onTrigger{
        rec.width = 100
    }
    ...
}

上述代码中,当定时器触发时会给rec的width赋值,此时width = 2* heght 的属性绑定关系将永久失效,如果想保留绑定关系,则要使用 binding 函数重新绑定 : 

Rectangle{
    id:rec
    ...
    width : 2*height
    ...
}

Timer{
    ...
    onTrigger{
        rec.width = 100
        rec.width = Qt.binding(function() { return 2*rec.height })    //再次建立属性绑定
    }
    ...
}

缺少 Width 或 Height 的 Rectangle将不会显示

当一些Rectangle的 width 和 height 互相依赖的时候,可能回导致 width 和 height 都得不到确切的数值,这会导致 Rectangle 不显示。

而 implicitWidth 和 implicitHeight 正是用来解决这个问题的。

Text 和 Label 在显示文字时的尺寸问题

Text 和 Label 的尺寸和其内容有很大关系,当内容为空时,width又没设置时,则Text 和 Label将不显示,如果内容长度比组件width 长,且又没设置elide属性,那么内容将无视组件边界直接溢出,如果设置了elide属性,则会省略显示超长部分。

一般情况下, 先规划组件的尺寸,然后再设置elide属性,这样便显示的文本不会有问题。

图片显示裁剪

想要PreserveAspectCrop效果时, clip = true 要一起设置,clip默认是false 的 ,如果仅设置了PreserveAspectCrop,则图片还是会溢出边界。

alias 属性仅在 root 层有效

Rectangle{
    id:root
    ...
    property alias rootheight:rec.height    //外部可以访问rootheight

    Rectangle{
        id:rec
		...
        property alias recheight:rec.height    //外部无法访问recheight
		...
    }
    ...
}

おすすめ

転載: blog.csdn.net/ykun089/article/details/120746027