QML视图(PathView)

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: nameModel
        ListElement {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: nameDelegate
        Text {
            text: name;
            font.pixelSize: 24
            anchors.leftMargin: 2
        }
    }

绘制(PathLine)直线:

PathView{
        anchors.fill: parent
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 100;startY: 100  //起点
            PathLine{x:300;y:100}  //线段的终点
        }
    }

 绘制(PathQuad二次贝塞尔曲线

x

y

曲线的终点

relativeX 

relativeY

曲线相对于其起点的终点

controlX

controlY 

定义控制点的位置

relativeControlX

relativeControlY

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

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

x

y

定义曲线的终点

relativeX 

relativeY

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

control1X

control1Y 

contro2lX

control2Y 

定义第一个控制点的位置

定义第二个控制点的位置

relativeControl1X

relativeControl1Y

relativeControl2X

relativeControl2Y

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

 绘制(PathArc)弧

x,y

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

圆弧的方向,

Clockwise(顺时针)默认

Counterclockwise(逆时针)

useLargeArc是否使用由圆弧点定义的大圆弧
xAxisRotation定义圆弧的旋转(以度为单位)。默认值为 0。
PathView{
        anchors.fill: parent
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 100;startY:100
            PathArc {
                    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: parent
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 100;startY:100
            PathCurve { 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: nameDelegate
        Text {
            scale: PathView.textScale  //委托中使用
            opacity: PathView.textOpacity//委托中使用
            text: name;
            font.pixelSize: 24
            anchors.leftMargin: 2
        }
    }
    PathView{
        id:pathview1
        anchors.fill: parent
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 120; startY: 100
            PathAttribute { 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:pathview1
        x:100;y:100
        width: 400;height: 400
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 20; startY: 0
            PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
            PathLine { x: 150; y: 80 }
            PathQuad { x: 180; y: 0; controlX: 200; controlY: 80 }
        }
        focus: true
        Keys.onLeftPressed: decrementCurrentIndex()
        Keys.onRightPressed: incrementCurrentIndex()

    }

使用 PathPercent设置间距:

PathView{
        id:pathview1
        x:100;y:100
        width: 400;height: 400
        model:nameModel
        delegate: nameDelegate
        path: Path{
            startX: 20; startY: 0
            PathQuad { 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: true
        Keys.onLeftPressed: decrementCurrentIndex()
        Keys.onRightPressed: incrementCurrentIndex()

    }

直线部分更加密集: 

 使用高亮:

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

    }

 

### 回答1: QML是一种用于构建用户界面的语言,而QML PathViewQML中一个重要的视图组件。PathView可以使用户界面中的元素在一条路径上移动,它与ListView和GridView相似,但不同之处在于它不仅可以在水平和垂直方向上滚动,还可以在任意的路径上滚动。 在PathView中,路径可以是直线、弧线、三次或二次贝塞尔曲线、椭圆或自定义路径等,用户可以定义这些路径的起始点、终点、方向和曲率等参数,为用户界面中元素的移动提供了更多的自由度和灵活性。 PathView中的元素通常是由一个delegate定义的,可以将其理解为一个模板,用户可以根据自己的需要对delegate进行定制,包括元素的大小、颜色、位置和动画等属性。用户还可以选择路径上元素的排列方向,如从左到右、从右到左、从上到下、从下到上等。 PathView极大地丰富了QML中的视图组件,使用户界面变得更加生动和富有动感。它可以应用于用户界面中的各种场景,如图形化的时间轴、旋转菜单、流式列表等。在实际开发中,QML PathView可以帮助开发者快速构建具有创新和视觉效果的用户界面,提高用户体验和界面交互的质量。 ### 回答2: QML PathView是一个QML组件,它提供了一个沿着指定路径展示项目的视图。该组件可以实现拖动和滑动视图项目。QML PathView非常适合用于创建用户界面中的滑动选择器、菜单列表和时间轴等。 QML PathView可以用来展示不同类型的视图项目,如图片、文本、按钮等。它的工作方式是在组件内部创建一个模型视图,该视图会根据用户交互来调整相应的项目位置和大小。用户可以用鼠标或者触摸屏幕来滑动视图,这样就可以轻松地选择感兴趣的项目。 QML PathView组件中有三种不同类型的路径可供选择,包括直线、圆和贝塞尔曲线。在运用QML PathView时,我们需要指定可视化的项目数量,以及每个项目在路径上的位置和大小。我们还可以通过属性设置来控制项目的初始状态、动画效果和选择行为等。 总的来说,QML PathView是一个强大的QML组件,它可以在用户界面中实现各种各样的交互效果。通过使用它,我们可以轻松地创建漂亮、灵活和易用的应用程序。 ### 回答3: QML PathViewQt Quick中一个非常有用的组件,它可以快速地创建一个可滚动的列表或视图,让用户能够通过手势或滚动条来浏览内容。PathView支持多种布局方式,可以让用户以多种形式来浏览内容,包括垂直、水平、环形等多种方式。 PathView使用一个Path来布局,可以根据Path的形状来设置内容的显示方式,这个Path可以是任意形状,包括直线、圆弧等等。同时,PathView还提供了许多自定义的选项,比如动画效果、边距、缩放等,使得开发者可以快速创建各种各样的视图。在开发中,PathView通常与ListModel或ArrayModel一起使用,用于将数据绑定到视图上。 在使用PathView时,需要注意一些性能问题。由于PathView默认会缓存所有的元素,如果元素过多,会造成内存开销过大,影响性能。因此,需要合理地设置PathView的一些属性,如缓存大小等,以避免性能问题。 总的来说,QML PathView是一个非常实用的组件,可以快速地创建各种类型的视图,可以使用户更加轻松地浏览内容,同时也提高了开发的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值