QML视图(PathView)
创始人
2024-06-03 08:32:05
0

PathView(路径视图)

PathView 显示从内置 QML 类型(如 ListModel 和 XmlListModel)创建的模型的数据,或者在从 QAbstractListModel 继承的C++中定义的自定义模型类。

视图有一个模型(定义要显示的数据)和一个委托(用于定义应如何显示数据)。为路径上的每个项实例化委托。可以轻拂这些物品以沿路径移动它们。

  • PathView继承自Item

属性:

count

cacheItemCount 

项数

要缓存的路径外的最大项数

currentIndex

currentItem

当前索引

当前项目

delegate代理

dragging

dragMargin

拖动

拖动边距

flicking

flickDeceleration

maximumFlickVelocity 

轻弹

轻弹速率

最大轻弹速度

highlight

highlightItem

highlightMoveDuration 

高亮

高亮的项目

高亮移动时间

interactive 是否交互,否的话用户无法拖动或轻拂非交互式路径视图
model视图
moving 视图当前是否由于用户拖动或轻拂视图而移动
offset项目沿路径距其初始位置的距离
path 保存用于布置项的路径
pathItemCount 保存路径上任何时候可见的项数

附加属性文档:

PathView.isCurrentItem是否为当前项
PathView.onPath项当前是否在路径上
PathView.view管理此委托实例的视图

信号:

dragEnded()拖动结束,发出信号
dragStarted()拖动开始,发出信号
flickEnded()轻拂结束,发出信号
flickStarted()轻拂开始,发出信号
movementEnded()运动结束,发出信号
movementStarted()运动开始,发出信号

方法:

decrementCurrentIndex()

incrementCurrentIndex()

递减当前索引

递增当前索引

indexAt( x,  y)

itemAt( x,  y)

获取x,y上的索引

获取x,y上的项目

positionViewAtIndex定位视图

positionViewAtIndex: 

PathView.Beginning项目定位在路径的开头
PathView.Center项目定位在路径的中心
PathView.End将项目定位在路径的末尾
PathView.Contain 确保项目位于路径上
PathView.SnapPosition 

将项目定位在首选突出显示开始

Path(路径)

path定义供路径视图和形状使用的路径。路径由一个或多个路径段组成 - PathLine、PathPolyline、PathQuad、PathCubic、PathAngleArc、PathCurve、PathSvg

属性:

closed保存路径的开始和结束是否相同
pathElements保存组成路径的对象 
scale保存路径的比例因子

startX

starY

保存路径的起始位置

方法:

pointAtPercent当前路径的百分比 t 处的点。参数 t 必须介于 0 和 1 之间。

 使用场景:

元素PathViewShapeShape,GL_NV_path_renderingShape, software
PathMoveN/AYesYesYes
PathLine(直线)YesYesYesYes
PathPolyline(折线)YesYesNoYes
PathMultiLine(多线)YesYesNoYes

PathQuad

(二次贝塞尔曲线

YesYesYesYes

PathCubic

(三次贝塞尔曲线

YesYesYesYes

PathArc

具有半径的给定位置的弧

YesYesYesYes

PathAngleArc

中心点、半径和角度指定的弧

YesYesYesYes
PathSvgYesYesYesYes
PathAttribute(属性)YesN/AN/AN/A

PathPercent

沿路径的各个段分散项目的方法

YesN/AN/AN/A
PathCurve(曲线)YesNoNoNo

 使用方法:

模型和组件为: 

ListModel {id: nameModelListElement {name: "a"}ListElement {name: "b"}ListElement {name: "c"}ListElement {name: "d"}ListElement {name: "e"}ListElement {name: "f"}ListElement {name: "g"}ListElement {name: "h"}ListElement {name: "i"}ListElement {name: "j"}ListElement {name: "k"}}Component {id: nameDelegateText {text: name;font.pixelSize: 24anchors.leftMargin: 2}}

绘制(PathLine)直线:

PathView{anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 100;startY: 100  //起点PathLine{x:300;y:100}  //线段的终点}}

 绘制(PathQuad二次贝塞尔曲线

x

y

曲线的终点

relativeX 

relativeY

曲线相对于其起点的终点

controlX

controlY 

定义控制点的位置

relativeControlX

relativeControlY

定义控制点相对于曲线起点的位置
PathView{anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 0;startY:0PathQuad{ //绘制二次贝塞尔曲线x: 200; y: 0; 定义曲线的终点controlX: 100; controlY: 150 //定义控制点的位置}}}

 绘制(PathCubic)三次贝塞尔曲线

x

y

定义曲线的终点

relativeX 

relativeY

定义曲线相对于其起点的终点

control1X

control1Y 

contro2lX

control2Y 

定义第一个控制点的位置

定义第二个控制点的位置

relativeControl1X

relativeControl1Y

relativeControl2X

relativeControl2Y

定义控制点相对于曲线起点的位置
PathView{anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 100;startY:100PathCubic {x: 280; y: 0control1X: -10; control1Y: 190control2X: 350; control2Y: 190}}}

 绘制(PathArc)弧

x,y

弧的终点
relativeX,relativeY定义圆弧相对于其起点的终点
radiusX,radiusY半径
direction 

圆弧的方向,

Clockwise(顺时针)默认

Counterclockwise(逆时针)

useLargeArc是否使用由圆弧点定义的大圆弧
xAxisRotation定义圆弧的旋转(以度为单位)。默认值为 0。
PathView{anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 100;startY:100PathArc {x: 280; y: 400//终点radiusX: 100;radiusY: 200//半径direction: PathArc.Counterclockwise//逆时针}}}

 

绘制(PathAngleArc)中心点、半径和角度指定的弧

centerX ,centerY中心点
radiusX ,radiusY半径
startAngle起始角度(3点钟位置为零度)
sweepAngle扫描角度
moveToStart是否应将此元素与上一个 Path 元素(或 startX/Y)断开连接。

由于要使用QtQuick 2.15,我这里的版本不够高,这里就不演示了

绘制PathCurve曲线 

x,y终点
relativeX,relativeY 定义曲线相对于其起点的终点
PathView{anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 100;startY:100PathCurve { x: 75; y: 75 }PathCurve { x: 200; y: 150 }PathCurve { x: 325; y: 25 }PathCurve { x: 400; y: 100 }}}

设置 PathAttribute(属性)

name属性名
value数值

使用方法:

  1. 先创建PathAttribute{name:"xxxx";value:xx}
  2. 在委托中使用 PathView.xxxx来设置
Component {id: nameDelegateText {scale: PathView.textScale  //委托中使用opacity: PathView.textOpacity//委托中使用text: name;font.pixelSize: 24anchors.leftMargin: 2}}PathView{id:pathview1anchors.fill: parentmodel:nameModeldelegate: nameDelegatepath: Path{startX: 120; startY: 100PathAttribute { name: "textScale"; value: 1.0 } //创建属性PathAttribute { name: "textOpacity"; value: 1.0 }//创建属性PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }PathAttribute { name: "textScale"; value: 0.3 } //创建属性PathAttribute { name: "textOpacity"; value: 0.5 } //创建属性PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }}focus: true //获取焦点Keys.onLeftPressed: decrementCurrentIndex()//添加左右键盘移动Keys.onRightPressed: incrementCurrentIndex()}

 

PathPercent(沿路径的各个段分散项目的方法

 PathPercent允许您操作PathView路径上项目之间的间距。您可以使用它将路径的一部分上的项目聚集在一起,并将它们分散到路径的其他部分。 

value数值,到目前为止应布置的项目比例

 正常的情况:

PathView{id:pathview1x:100;y:100width: 400;height: 400model:nameModeldelegate: nameDelegatepath: Path{startX: 20; startY: 0PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }PathLine { x: 150; y: 80 }PathQuad { x: 180; y: 0; controlX: 200; controlY: 80 }}focus: trueKeys.onLeftPressed: decrementCurrentIndex()Keys.onRightPressed: incrementCurrentIndex()}

使用 PathPercent设置间距:

PathView{id:pathview1x:100;y:100width: 400;height: 400model:nameModeldelegate: nameDelegatepath: Path{startX: 20; startY: 0PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }PathPercent { value: 0.25 }PathLine { x: 150; y: 80 }PathPercent { value: 0.75 }PathQuad { x: 180; y: 0; controlX: 200; controlY: 80 }PathPercent { value: 1 }}focus: trueKeys.onLeftPressed: decrementCurrentIndex()Keys.onRightPressed: incrementCurrentIndex()}

直线部分更加密集: 

 使用高亮:

PathView{id:pathview1x:100;y:100width: 400;height: 400model:nameModeldelegate: nameDelegatepath: Path{startX: 100;startY: 100  //起点PathLine{x:300;y:100}  //线段的终点}highlight: Rectangle{width: 20;height: 20color: "lightBlue"}focus: trueKeys.onLeftPressed: decrementCurrentIndex()Keys.onRightPressed: incrementCurrentIndex()}

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...