教你如何使用qt quick-PathView实现好看的home界面

PathView ,顾名思义,沿着特定的路径显示 Model 内的数据。 Model 能够是 QML 内建的 ListModel 、 XmlListModel ,也能够是在 C++ 中实现的 QAbstractListModel 的派生类。

PathView 恐怕是 Qt Quick 提供的 Model-View 类库中最复杂也最灵活的一个了。

要使用一个 PathView ,至少须要设置 model 、 delegate 、 path 三个属性。
    model 、 delegate 假设你学习过 ListView 肯定已经接触过,这里不再细说。 path 是 PathView 的专有特性,它指定 PathView 用来放置 item 的路径。

要使用 PathView 。先要了解 Path 。

一个Path可以由下面多个Path段组成(之前讲解PathAnimation时提过):

  • PathLine : 由一个坐标指定的直线路径
  • PathPolyline : 由一个path坐标列表指定的多段路径
  • PathQuad : 由一个控制点生成的二次贝塞尔曲线路径
  • PathCubic : 由两个控制点生成的三次贝塞尔曲线路径
  • PathArc : 由结束坐标,以及一个radiusX和radiusY半径实现的一个圆弧(顺时针绘画)
  • PathAngleArc : 由中心点、半径和起始角度startAngle、旋转角度sweepAngle指定的圆弧。
  • PathCurve : 由一个坐标点生成的curve曲线路径(通常需要配合多个PathCurve才行)
  • PathSvg : 由SVG路径字符串实现的路径。你可以用它创建线条, 曲线, 弧形等等

下表概述了各种路径元素的适用性:

其中PathAttribute用来给路径上定义带有值的命名属性。而PathPercent则用来对每个间距进行一个调整。

1.PathAttribute
PathAttribute对象用来给路径上的不同点指定由name和value组成的自定义属性。自定义属性将会作为附加属性公开给委托。
路径上任何特定点上的属性值都是通过下个PathAttributes插入的。然后两个点之间的路径会根据属性value值做插值计算.
比如下面这个(参考QT帮助):

path: Path {
        startX: 120; startY: 100
        PathAttribute { name: "iconScale"; value: 1.0 }    // 给(120,100)添加属性iconScale = 1.0、iconOpacity = 1.0
        PathAttribute { name: "iconOpacity"; value: 1.0 }
        PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
        PathAttribute { name: "iconScale"; value: 0.3 }    // 给(120,25)添加属性iconScale = 0.3 iconOpacity = 0.5
        PathAttribute { name: "iconOpacity"; value: 0.5 }
        PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }
}

这里我们最后还有一个贝塞尔曲线,终点是(120,100),这里并未给它赋PathAttribute自定义属性,这是因为开头已经给(120,100)添加了属性.所以这里省略掉了.
大家不妨试试改成这样(其实效果一样):

path: Path {
        startX: 120; startY: 100
        PathAttribute { name: "iconScale"; value: 1.0 }    // 给(120,100)添加属性iconScale = 1.0、iconOpacity = 1.0
        PathAttribute { name: "iconOpacity"; value: 1.0 }
        PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
        PathAttribute { name: "iconScale"; value: 0.3 }    // 给(120,25)添加属性iconScale = 0.3 iconOpacity = 0.5
        PathAttribute { name: "iconOpacity"; value: 0.5 }
        PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }
        PathAttribute { name: "iconScale"; value: 1.0 }    // 给(120,100)添加属性iconScale = 1.0、iconOpacity = 1.0
        PathAttribute { name: "iconOpacity"; value: 1.0 }
}

2.PathPercent
PathPercent用来设置每个路径上的显示item的百分比比例,通常放在路径元素后面,来指示前面的路径显示item的百分比比例
比如下面示例:

path:Path {
        startX: 20; startY: 100
        PathQuad { x: 50; y: 180; controlX: 0; controlY: 80 }
        PathPercent { value: 0.25 }
        PathLine { x: 150; y: 180 }
        PathPercent { value: 0.75 }
        PathQuad { x: 180; y: 100; controlX: 200; controlY: 80 }
}

将50%的item放置在PathLine路径上,然后25%的item放置在其它PathQuad上.

3.PathView实战

我们参考韦东山之前发布的一个Qt开源视频,如下图所示:

最终做出来如下图所示:

效果图如下所示(有点大,需要多等下刷新出来):

源码已经上传到群里,由于我们借用了别人的UI图,所以请不要将别人的UI图片用在商业上,仅供学习参考使用!!!

核心代码如下所示:

ListModel {
          id: mymodel

          ListElement {
              name: "多媒体"
              back: "qrc:/images/media_nor.png"
          }
          ListElement {
              name: "系统设置"
              back: "qrc:/images/system_nor.png"
          }
          ListElement {
              name: "智能家电"
              back: "qrc:/images/machine_nor.png"
          }
          ListElement {
              name: "卫生医疗"
              back: "qrc:/images/medical_nor.png"
          }
          ListElement {
              name: "公共服务"
              back: "qrc:/images/public_nor.png"
          }
      }

    Component {
        id: delegate
        App {
            id: rect
            width: itemSize.width
            height: itemSize.height
            z: PathView.iconZ
            scale: PathView.iconScale
            imagSrc: back
            label: name
            enabled: view.opacity == 1.0

            transform: Rotation{
                origin.x: rect.width/2.0
                origin.y: rect.height/2.0
                axis{x:0;y:1;z:0}
                angle: rect.PathView.iconAngle
            }
            MouseArea {
                anchors.fill: parent
                onClicked: {
                    if (view.currentIndex == index)
                        newJumpWindow("qrc:/AppWindow.qml", name)
                }
            }
        }
    }

    PathView {
        id: view
        anchors.centerIn: parent
        width: (itemCount-1.9)*itemSize.width
        height: wind.height
        model: mymodel
        delegate: delegate
        flickDeceleration: 300
        preferredHighlightBegin: 0.5
        preferredHighlightEnd: 0.5
        pathItemCount: itemCount
        clip: true
        enabled: opacity == 1.0
        path: Path {
            id: path
            startX: 0
            startY: view.height * 0.45

            PathAttribute{name:"iconZ";value: 0}
            PathAttribute{name:"iconAngle";value: -50}
            PathAttribute{name:"iconScale";value: 0.7}
            PathLine{x:view.width/2; y: path.startY}  // 设置初始Z为0,角度为70 大小比例为0.6

            PathAttribute{name:"iconZ";value: 100}
            PathAttribute{name:"iconAngle";value: 0}
            PathAttribute{name:"iconScale";value: 1.0}

            PathLine{x:view.width; y: path.startY}
            PathAttribute{name:"iconZ";value: 0}
            PathAttribute{name:"iconAngle";value: 50}
            PathAttribute{name:"iconScale";value: 0.7}

        }
    }

未完待续 ~

以上就是教你如何使用qt quick-PathView实现好看的home界面的详细内容,更多关于qt quick-PathView的资料请关注我们其它相关文章!

(0)

相关推荐

  • Qt Quick QML-500行代码实现合成大西瓜游戏

    "合成大西瓜"这个游戏在年前很火热,还上过微博热搜,最近便玩了一阵还挺有意思的,所以研究了一下小球碰撞原理,自己亲自手写碰撞算法来实现一个合成大西瓜游戏.并支持任意大小布局,你想玩多大面积,就拖多大面积,只要面积够大,认真玩下去,合100个大西瓜都可以.哈哈~~~ 1.游戏介绍 游戏里面总共有11个水果,两个相同水果的合成一个较大的水果,最终合成一个大西瓜便不能继续合下去了: 然而博主自己写的游戏,自己都合不出一个大西瓜来. 如果看起来很模糊,或者看不到视频,可以直接去https://

  • 使用qt quick-ListView仿微信好友列表和聊天列表的示例代码

    1.视图模型介绍 在Qml中.常见的View视图有: ListView: 列表视图,视图中数据来自ListModel.XmlListModel或c++中继承自QAbstractItemModel或QAbstractListModel的自定义模型类 TableView: 和excel类似的视图 GridView: 网格视图,类似于home菜单那样,排列着一个个app小图标 PathView: 路径视图,可以根据用户自定义的path路径来显示不一样的视图效果 SwipeView: 滑动视图,使用一组

  • 教你如何使用qt quick-PathView实现好看的home界面

    PathView ,顾名思义,沿着特定的路径显示 Model 内的数据. Model 能够是 QML 内建的 ListModel . XmlListModel ,也能够是在 C++ 中实现的 QAbstractListModel 的派生类. PathView 恐怕是 Qt Quick 提供的 Model-View 类库中最复杂也最灵活的一个了. 要使用一个 PathView ,至少须要设置 model . delegate . path 三个属性.     model . delegate 假设

  • Qt Quick Designer灰色或者禁用的解决

    今天安装qt6的时候发现一个问题,下面就来解决一下,具体如下: 目前新版本自qt6开始,已经默认禁用了Qt Quick Designer,qt未来将ui图像化重任要交给Qt Design Studio了,目地就是做ui设计的不用安装creator,目前过渡阶段,可以从插件中心启用. 到此这篇关于Qt Quick Designer灰色或者禁用的解决的文章就介绍到这了,更多相关Qt Quick Designer禁用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • IDA Pro 6.0使用Qt框架实现了跨平台的UI界面

    IDA Pro 6.0使用Qt 框架实现了跨平台的UI.它的好处是插件编写者还可以直接使用 Qt 开发跨平台 UI.但是编剧呢? 在这篇博文中,我们将说明如何使用PySide使用IDAPython为 IDA Pro 创建 UI 界面. ipq_intro 背景 在早期版本的 IDA Pro 中,可以使用create_tform() / display_tform() API创建自定义 UI ,但代码是特定于平台的.在 MS Windows 上,程序员接收父窗体的 HWND,然后用自定义控件填充它

  • 手把手教你实现漂亮的Qt 登录界面

    前言 最近在使用Qt5,Qt Creator做一个管理系统类的项目,自然需要用到登录界面,故记录一下登录界面的制作.其中一些功能的实现也得益于之前Qt5基础视频不规则窗口部分的学习. 手把手教你实现漂亮的登录界面 首先看一下成品. 第一步.新建一个Qwidget项目 没必要用qmainwindow,不需要那些菜单,一般用qwidget就可以,注意勾选ui. 第二步.添加界面组件 1.添加容器 调整容器为合适大小,同时调整整个画布为合适大小. 2.添加按钮,标签,文字组件 构思: 账号密码部分使用

  • Qt设计时钟效果

    作为一位Qt的初学者,也是一位编程的小白,我今天想教大家如何使用Qt来设计一个时钟. 首先,我们要学习如何绘图--QPainter类 QPainter通常在一个窗口的重绘事件(paint event)的处理函数paintEvent中进行绘制.QPainter类常用的功能有以下几类: 1)设置绘图工具.包括设置画笔(setPen),设置画刷(setBrush),设置字体(setFont)以及设置背景(setBackgroundMode). 2)绘制图形和文字,如图: QPainter部分画图函数的

  • Qt Creator使用教程的简单说明

    目录 Qt Creator 欢迎界面 Qt Creator 新建项目 1)左边栏 2) 代码编辑器 Qt Creator 编辑 UI Qt Creator 生成和运行程序 Qt 在很长的一段时间内都没有自己的开发环境,直到 Qt 被诺基亚收购,才大力推自己的集成开发环境,就是 Qt Creator,这为 Qt 的开发带来了很大的方便. 在 Qt Creator 诞生之前, 程序员可以通过 qmake 命令行编译,或者像前面几节一样手动输入 g++ 命令编译,在 Linux 平台还有 KDevel

  • Qt使用windeployqt工具实现程序打包发布方法

    目录 1. Qt Widgets Application 2.Qt Quick Application Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个工具:windeployqt.exe. 以官方 Qt 5.4.0+MinGW 开发环境为例,windeployqt工具在 %QTDIR%\Qt5.4.0\5.4\mingw491_32\bin 目

  • Qt Design Studio创建工程的实现方法

    目录 Creating Projects 使用项目向导 向项目中添加文件 Creating Projects Qt Design Studio的主要优势之一是,它允许设计人员和开发人员使用通用的设计.开发.分析和调试工具在不同的开发平台上共享一个项目. 创建项目使您能够: 文件组 包括UI文件(.ui.qml).组件文件(.qml)和资产文件 设置用户界面预览 在Qt Design Studio中设置一个新项目可以通过向导逐步指导您完成项目创建过程.向导模板提示您输入特定类型项目所需的设置,并为

  • Qt项目打包的实现步骤

    目录 准备项目文件 用InstallShield 解决打包后自动启动cmd窗口的问题 准备项目文件 本质上就是把依赖的动态库放到你指定的文件夹里面去:这样在其他电脑上运行时,就不需要再安装qt的开发环境了: 在qt creator中使用Release编译: 然后打开qt命令行工具,注意不是windows自带的命令行工具,如下所示: 切换到Release路径下,示例如下: cd /d D:/xxx/xxx/release 在qt命令行中输入下列命令,xxx替换成你自己的exe名字: windepl

随机推荐