[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
		...
    }
    ...
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值