最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你如何使用qt quick-PathView實(shí)現(xiàn)好看的home界面

 更新時(shí)間:2021年06月26日 08:19:08   作者:諾謙  
pathView的使用類似與ListView,都需要模型(model)和代理(delegate),只不過pathView多了一個(gè)路徑(path)屬性,顧名思義路徑就是item滑動(dòng)的路徑,下面給大家分享qt quick-PathView實(shí)現(xiàn)好看的home界面,一起看看吧

PathView ,顧名思義,沿著特定的路徑顯示 Model 內(nèi)的數(shù)據(jù)。 Model 能夠是 QML 內(nèi)建的 ListModel 、 XmlListModel ,也能夠是在 C++ 中實(shí)現(xiàn)的 QAbstractListModel 的派生類。

    PathView 恐怕是 Qt Quick 提供的 Model-View 類庫中最復(fù)雜也最靈活的一個(gè)了。

    要使用一個(gè) PathView ,至少須要設(shè)置 model 、 delegate 、 path 三個(gè)屬性。
    model 、 delegate 假設(shè)你學(xué)習(xí)過 ListView 肯定已經(jīng)接觸過,這里不再細(xì)說。 path 是 PathView 的專有特性,它指定 PathView 用來放置 item 的路徑。

要使用 PathView 。先要了解 Path 。

一個(gè)Path可以由下面多個(gè)Path段組成(之前講解PathAnimation時(shí)提過):

  • PathLine : 由一個(gè)坐標(biāo)指定的直線路徑
  • PathPolyline : 由一個(gè)path坐標(biāo)列表指定的多段路徑
  • PathQuad : 由一個(gè)控制點(diǎn)生成的二次貝塞爾曲線路徑
  • PathCubic : 由兩個(gè)控制點(diǎn)生成的三次貝塞爾曲線路徑
  • PathArc : 由結(jié)束坐標(biāo),以及一個(gè)radiusX和radiusY半徑實(shí)現(xiàn)的一個(gè)圓弧(順時(shí)針繪畫)
  • PathAngleArc : 由中心點(diǎn)、半徑和起始角度startAngle、旋轉(zhuǎn)角度sweepAngle指定的圓弧。
  • PathCurve : 由一個(gè)坐標(biāo)點(diǎn)生成的curve曲線路徑(通常需要配合多個(gè)PathCurve才行)
  • PathSvg : 由SVG路徑字符串實(shí)現(xiàn)的路徑。你可以用它創(chuàng)建線條, 曲線, 弧形等等

下表概述了各種路徑元素的適用性:

其中PathAttribute用來給路徑上定義帶有值的命名屬性。而PathPercent則用來對(duì)每個(gè)間距進(jìn)行一個(gè)調(diào)整。


1.PathAttribute
PathAttribute對(duì)象用來給路徑上的不同點(diǎn)指定由name和value組成的自定義屬性。自定義屬性將會(huì)作為附加屬性公開給委托。
路徑上任何特定點(diǎn)上的屬性值都是通過下個(gè)PathAttributes插入的。然后兩個(gè)點(diǎn)之間的路徑會(huì)根據(jù)屬性value值做插值計(jì)算.
比如下面這個(gè)(參考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 }
}

這里我們最后還有一個(gè)貝塞爾曲線,終點(diǎn)是(120,100),這里并未給它賦PathAttribute自定義屬性,這是因?yàn)殚_頭已經(jīng)給(120,100)添加了屬性.所以這里省略掉了.
大家不妨試試改成這樣(其實(shí)效果一樣):

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用來設(shè)置每個(gè)路徑上的顯示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實(shí)戰(zhàn)

我們參考韋東山之前發(fā)布的一個(gè)Qt開源視頻,如下圖所示:

最終做出來如下圖所示:

效果圖如下所示(有點(diǎn)大,需要多等下刷新出來):

源碼已經(jīng)上傳到群里,由于我們借用了別人的UI圖,所以請(qǐng)不要將別人的UI圖片用在商業(yè)上,僅供學(xué)習(xí)參考使用?。。?/p>

核心代碼如下所示:

ListModel {
          id: mymodel

          ListElement {
              name: "多媒體"
              back: "qrc:/images/media_nor.png"
          }
          ListElement {
              name: "系統(tǒng)設(shè)置"
              back: "qrc:/images/system_nor.png"
          }
          ListElement {
              name: "智能家電"
              back: "qrc:/images/machine_nor.png"
          }
          ListElement {
              name: "衛(wèi)生醫(yī)療"
              back: "qrc:/images/medical_nor.png"
          }
          ListElement {
              name: "公共服務(wù)"
              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}  // 設(shè)置初始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}

        }
    }

未完待續(xù) ~

以上就是教你如何使用qt quick-PathView實(shí)現(xiàn)好看的home界面的詳細(xì)內(nèi)容,更多關(guān)于qt quick-PathView的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++實(shí)現(xiàn)map和set封裝詳解

    C++實(shí)現(xiàn)map和set封裝詳解

    歡迎閱讀本指南,將帶您深入了解C++中map和set的實(shí)現(xiàn)細(xì)節(jié),本文將重點(diǎn)介紹如何使用C++標(biāo)準(zhǔn)庫中的容器來優(yōu)化代碼,同時(shí)提供實(shí)用的示例和技巧,無論您是初學(xué)者還是資深開發(fā)者,本指南都將成為您掌握C++中map和set封裝的有力助手,需要的朋友可以參考下
    2024-03-03
  • Qt使用QPainter繪制3D立方體

    Qt使用QPainter繪制3D立方體

    這篇文章主要為大家詳細(xì)介紹了Qt使用QPainter繪制3D立方體,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • C++之內(nèi)存泄漏排查詳解

    C++之內(nèi)存泄漏排查詳解

    這篇文章主要介紹了c++ 如何排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-10-10
  • c++ 排查內(nèi)存泄漏的妙招

    c++ 排查內(nèi)存泄漏的妙招

    這篇文章主要介紹了c++ 如何用輔助類排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++基于Boost庫實(shí)現(xiàn)命令行解析

    C++基于Boost庫實(shí)現(xiàn)命令行解析

    Boost庫中默認(rèn)自帶了一個(gè)功能強(qiáng)大的命令行參數(shù)解析器,以往我都是自己實(shí)現(xiàn)參數(shù)解析的,今天偶爾發(fā)現(xiàn)這個(gè)好東西,就來總結(jié)一下參數(shù)解析的基本用法,該庫需要引入program_options.hpp頭文件,即可使用了
    2021-06-06
  • C語言聯(lián)合體的實(shí)現(xiàn)示例

    C語言聯(lián)合體的實(shí)現(xiàn)示例

    C語言聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),它允許在相同的內(nèi)存位置存儲(chǔ)不同的數(shù)據(jù)類型,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 利用Matlab仿真實(shí)現(xiàn)圖像煙霧識(shí)別(k-means聚類圖像分割+LBP+PCA+SVM)

    利用Matlab仿真實(shí)現(xiàn)圖像煙霧識(shí)別(k-means聚類圖像分割+LBP+PCA+SVM)

    本文主要介紹了利用k-means聚類實(shí)現(xiàn)圖像分割+LBP算法進(jìn)行特征提取+PCA算法進(jìn)行特征降維+SVM算法訓(xùn)練二分類模型從而實(shí)現(xiàn)煙霧識(shí)別。文中介紹很詳細(xì),感興趣的朋友可以了解一下
    2021-12-12
  • 快速入門的一些C\C++書籍

    快速入門的一些C\C++書籍

    這篇文章為大家精心推薦了一些快速入門的一些C\C++書籍,希望大家可以喜歡,對(duì)這門語言可以產(chǎn)生興趣,需要的朋友可以參考下
    2015-12-12
  • 淺談c語言中一種典型的排列組合算法

    淺談c語言中一種典型的排列組合算法

    下面小編就為大家?guī)硪黄獪\談c語言中一種典型的排列組合算法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • C++中異常機(jī)制的實(shí)現(xiàn)機(jī)制詳解

    C++中異常機(jī)制的實(shí)現(xiàn)機(jī)制詳解

    這篇文章主要給大家介紹了關(guān)于C++中異常機(jī)制的實(shí)現(xiàn)機(jī)制的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06

最新評(píng)論

南和县| 伊金霍洛旗| 方城县| 来安县| 建德市| 新巴尔虎左旗| 镇康县| 岚皋县| 金堂县| 绍兴县| 裕民县| 石城县| 鄂托克旗| 密山市| 边坝县| 庆元县| 河池市| 石河子市| 安龙县| 红桥区| 淮北市| 罗甸县| 柏乡县| 成武县| 上林县| 汨罗市| 岚皋县| 石渠县| 凤冈县| 钟山县| 曲水县| 南充市| 蓬莱市| 松原市| 子洲县| 甘孜县| 长葛市| 金山区| 克拉玛依市| 晋城| 泾阳县|