qml 虚线边框绘制

本文介绍如何在 QML 中实现虚线边框的绘制,讲解相关属性和技巧,帮助开发者创建具有定制边框效果的 UI 元素。
    Rectangle{
        width: 400
        height: 100
        anchors.centerIn: parent
        Column{
            width:1
            height:parent.height
            spacing: 5
            clip: true
            anchors.left: parent.left
            Repeater{
                anchors.fill: parent
                model: parent.height/10
                delegate:Rectangle{
                    width: 1
                    height: 10
                    color: "black"
                }
            }
        }
        Column{
            width:1
            height:parent.height
            spacing: 5
            clip: true
            anchors.right: parent.right
            Repeater{
                anchors.fill: parent
                model: parent.height/10
                delegate:Rectangle{
                    width:1
                    height: 10
                    color: "black"
                }
            }
        }
        Row{
            width: parent.width
            height: 1
            spacing: 5
            clip: true
            anchors.top: parent.top
            Repeater{
                anchors.fill: parent
                model: parent.width/10
                delegate:Rectangle{
                    width: 10
                    height: 1
                    color: "black"
                }
            }
        }
        Row{
            width: parent.width
            height: 1
            spacing: 5
            clip: true
            anchors.bottom: parent.bottom
            Repeater{
                anchors.fill: parent
                model: parent.width/10
                delegate:Rectangle{
                    width: 10
                    height: 1
                    color: "black"
                }
            }
        }
    }

### QML Rectangle 绘制虚线边框QML中,`Rectangle`组件本身并不直接提供绘制虚线边框的功能。然而,可以借助其他技术手段来实现这一目标。一种常见的做法是通过创建一个自定义的 `BorderImage` 或者利用 `ShaderEffect` 实现复杂的效果。对于简单的虚线边框需求,通常推荐使用 `PaintedItem` 结合 Canvas API 来完成。 另一种更简便的方式是在 `Rectangle` 外部包裹另一个透明的 `Rectangle` 并在其内部放置由一系列短线条组成的路径模拟虚线效果[^1]: ```qml import QtQuick 2.0 Window { visible: true width: 400; height: 300 Item { // 容器用于定位 anchors.centerIn: parent Rectangle { // 主体矩形 id: mainRect width: 200; height: 150 color: "lightblue" border.color: "#ffffff" // 白色实线边界作为背景 // 创建虚线视觉效果 Repeater { model: Math.max(mainRect.width, mainRect.height) / 8 | 0 delegate: Rectangle { x: index % (mainRect.width / 8) * 8 + ((index & 1)? 4 : 0) y: (index / (mainRect.width / 8))|0 * 8 + (((index&1)^((index/(mainRect.width/8))&1))? 4 : 0) width: 4; height: 4 color: "black" visible: !(Math.floor(index / (mainRect.width / 8)) % 2 && index % 2) } } } Rectangle { // 较大范围的白色遮罩层使虚线更加明显 anchors.fill: mainRect color: "transparent" border.color: "white"; border.width: 2 } } } ``` 此代码片段展示了如何在一个较大的透明 `Rectangle` 中嵌入一个小一些的目标 `Rectangle` ,并通过重复的小黑方块形成虚线外观。外部再加一层白色的宽边框使得虚线更为突出[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值