初识qml——PathView xyz轴 路径属性 旋转效果 鼠标键盘控制

13 篇文章 0 订阅
8 篇文章 1 订阅

不可能

pathview弄出来就这效果是不能接受的,所以继续往下,基本流程清楚后开始花里胡哨起来!

先理解

还是先理解做法的理念,这次找到这位大佬的demo QML实现酷炫的 Cover Flow 效果(PathView) ,概括起来为pathview添加部分效果,目的是为了好看:

  1. 展示分了层次,有一种前面和后面的层次,这就是z轴。
  2. 大小也有层次,最前面展示的最大,形成动态感。
  3. 各个目标有一定程度的翻转,看起来更立体。
  4. 出现倒影效果

PathAttribute

在Path的每个点后,可以自定义一些数据,这些数据可以应用于当前点的delegate。ok那每个点后添加三个属性,分别应用于后续使用的z轴,旋转角度和缩放大小:

Path{
    id:pathview_path

    startX: root.width*2/7
    startY: root.height/3
    PathAttribute{name:"picZ";value: 0}
    PathAttribute{name:"picAngle";value: 50}
    PathAttribute{name:"picScale";value: 0.6}

    PathLine{x:root.width/2;y:root.height/3}
    PathAttribute{name:"picZ";value: 100}
    PathAttribute{name:"picAngle";value: 0}
    PathAttribute{name:"picScale";value: 1.0}

    PathLine{x:root.width*5/7;y:root.height/3}
    PathAttribute{name:"picZ";value: 0}
    PathAttribute{name:"picAngle";value: -50}
    PathAttribute{name:"picScale";value: 0.6}
}

设置后,delegate中可通过PathView.picZ等来访问当前点的这个数据。而点与点之间的点的数据底层会自动计算逐步的递增或递减,就不用自己再定义了。

Z轴

z轴大概就是垂直于电脑屏幕的轴线,z轴值越大,就等于离看这电脑屏幕的你越近。

在delegate的Item里添加z:PathView.picZ属性和数据即可。

可以看到,中间的点的z轴数据是100,两边的是0。

大小和翻转

大小简单,用scale属性可以控制大小:scale:PathView.picScale。

而翻转就复杂很多,先设置变量接住设置的翻转角度属性:property int angle1: PathView.picAngle

为delegate添加翻转效果,使用transform: Rotation组件,通过设置原点的旋转轴和角度,就形成了旋转的效果。

transform: Rotation{
    origin.x:image.width/2.0
    origin.y:image.height/2.0
    axis{x:0;y:1;z:0}
    angle: angle1
}

这个通过官网文档可以理解一点 Rotation QML Type

而这个图和解释,就挺一目了然的:
在这里插入图片描述

倒影效果

先设好图片,右键资源文件目录qml.qrc有一个Open in Editor选项,里面选择Add添加图片进资源文件备用。

加载图片需要路径,这次的listmode的数据为图片的路径:

ListModel {
    id:datamodel;
    ListElement {url:"qrc:/1.jpg";}
    ListElement {url:"qrc:/2.jpg";}
    ListElement {url:"qrc:/3.jpg";}
    ListElement {url:"qrc:/4.jpg";}
    ListElement {url:"qrc:/5.jpg";}
}

后面在delegate里添加图片,由于有图片翻转了会出现一定的锯齿,添加抗锯齿属性antialiasing:

Image{
    id:image
    antialiasing: true
    source: url
    width: mydelegate.width
    height: mydelegate.height
}

添加倒影是在图片的正下方再画一个倒立的图片即可,这边怎么实现的就不去追究了,直接拿大佬的:

ShaderEffect {
    id: effectImage
    anchors.top: image.bottom
    width: image.width
    height: image.height;
    anchors.left: image.left
    property variant source: image;
    property size sourceSize: Qt.size(0.5 / image.width, 0.5 / image.height);
    fragmentShader:
    "varying highp vec2 qt_TexCoord0;
    uniform lowp sampler2D source;
    uniform lowp vec2 sourceSize;
    uniform lowp float qt_Opacity;
    void main() {

        lowp vec2 tc = qt_TexCoord0 * vec2(1, -1) + vec2(0, 1);
        lowp vec4 col = 0.25 * (texture2D(source, tc + sourceSize) + texture2D(source, tc- sourceSize)
        + texture2D(source, tc + sourceSize * vec2(1, -1))
        + texture2D(source, tc + sourceSize * vec2(-1, 1)));
        gl_FragColor = col * qt_Opacity * (1.0 - qt_TexCoord0.y) * 0.2;
    }"
}

鼠标键盘

pathview是没有集成鼠标点击事件的,就是点击项目是不会切换到那个项目,只能鼠标拖动。

所以在delegate中添加鼠标点击,集成这个效果吧:

MouseArea{
    anchors.fill: parent
    onClicked: {
    	pathView.currentIndex = index;
    }
}

同理添加一下键盘控制,一开始发现怎么都不生效,后来发现是得先让pathview聚焦才行:

focus: true;
Keys.onLeftPressed: decrementCurrentIndex();
Keys.onRightPressed: incrementCurrentIndex();
Keys.onTabPressed: incrementCurrentIndex();

中间突出

最后把设置一下无论鼠标怎么拖动,突出的只有一个项目,术语叫期待选定项位位置,让当前选定的项位在路径的中间,这样无论怎么拖动都有一个固定在中间了:

preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5

我们不一样!

曾经的我很丑,但也只是曾经。
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答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 PathView是Qt Quick中一个非常有用的组件,它可以快速地创建一个可滚动的列表或视图,让用户能够通过手势或滚动条来浏览内容。PathView支持多种布局方式,可以让用户以多种形式来浏览内容,包括垂直、水平、环形等多种方式。 PathView使用一个Path来布局,可以根据Path的形状来设置内容的显示方式,这个Path可以是任意形状,包括直线、圆弧等等。同时,PathView还提供了许多自定义的选项,比如动画效果、边距、缩放等,使得开发者可以快速创建各种各样的视图。在开发中,PathView通常与ListModel或ArrayModel一起使用,用于将数据绑定到视图上。 在使用PathView时,需要注意一些性能问题。由于PathView默认会缓存所有的元素,如果元素过多,会造成内存开销过大,影响性能。因此,需要合理地设置PathView的一些属性,如缓存大小等,以避免性能问题。 总的来说,QML PathView是一个非常实用的组件,可以快速地创建各种类型的视图,可以使用户更加轻松地浏览内容,同时也提高了开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值