Qt Quick 多段路径PathView实现:Item分布与自定义属性控制问题
问题原因及修正方案
你遇到的两个问题都属于PathView的默认特性导致的偏差,按如下方式调整即可实现预期效果:
1. 属性线性过渡问题
PathAttribute默认会在相邻的两个属性定义点之间做线性插值计算,所以你当前的写法中,第一段末尾和第二段开头的属性会自动生成渐变过渡值,才会出现缩放和旋转平滑变化的效果。
要实现阶跃式的属性跳转,只需要在每个路径分段的结束位置,重复定义一次和分段起始一致的属性值,让两个不同属性的定义点之间没有路径段,插值区间为0即可消除过渡效果。
2. 分段Item数量不符问题
PathView的可见Item是均匀分布在路径的[0,1]百分比区间的,pathItemCount:10的情况下,10个Item对应的百分比位置为index/(pathItemCount-1),也就是[0, 1/9≈0.111, 2/9≈0.222, 3/9≈0.333 ... 8/9≈0.888, 1]。你原来设置的分界值0.2刚好落在1/9和2/9之间,0.8落在7/9和8/9之间,导致分段计数偏移。只需要把分界值调整到刚好在两个Item的百分比位置之间即可,比如第一段分界设为0.22,第二段分界设为0.78。
完整修正代码
import QtQuick Rectangle { id: root border.color: "blue" width: 600; height: 600 // 补充根控件尺寸,避免布局异常 Component { id: theDele Rectangle { id: rect color: Qt.rgba(Math.random(), Math.random(),Math.random(), 1) visible: PathView.onPath width: 50; height: 50 transformOrigin: Item.Center // 旋转缩放原点设为中心,替代原有的Translate写法 scale: PathView.itemScale rotation: PathView.itemAngle Text { anchors.centerIn: parent text: index + "ABC" } } } PathView { anchors.fill: parent model: 100 pathItemCount: 10 delegate: theDele path: Path { startX: 0; startY: 100 // 第一段路径:属性固定为-90°、0.5倍缩放 PathAttribute {name: "itemAngle"; value: -90} PathAttribute {name: "itemScale"; value: 0.5} PathLine {x: 300; y: 100} // 分段结束前重复属性,避免插值 PathAttribute {name: "itemAngle"; value: -90} PathAttribute {name: "itemScale"; value: 0.5} PathPercent {value: 0.22} // 第二段路径:属性固定为0°、1倍缩放 PathAttribute {name: "itemAngle"; value: 0} PathAttribute {name: "itemScale"; value: 1} PathLine {x: 300; y: 500} // 分段结束前重复属性,避免插值 PathAttribute {name: "itemAngle"; value: 0} PathAttribute {name: "itemScale"; value: 1} PathPercent {value: 0.78} // 第三段路径:属性固定为90°、0.5倍缩放 PathAttribute {name: "itemAngle"; value: 90} PathAttribute {name: "itemScale"; value: 0.5} PathLine {x: 600; y: 500} PathPercent { value: 1 } } } }
内容的提问来源于stack exchange,提问作者jett chen
相关产品推荐
相关产品推荐

