Qt qml中l(wèi)istview 列表視圖控件(下拉刷新、上拉分頁(yè)、滾動(dòng)軸)
Qt qml listview下拉刷新和上拉分頁(yè)主要根據(jù)contentY來(lái)判斷。但要加上頂部下拉指示器、滾動(dòng)條,并封裝成可簡(jiǎn)單調(diào)用的組件,著實(shí)花了我不少精力:)
先給大家展示下效果圖:
【功能】
下拉刷新和上拉分頁(yè)邏輯 /下拉刷新 /上拉更多 /滾動(dòng)欄 /工具欄半拉顯隱 Author: surfsky.cnblogs.com Lisence: MIT 請(qǐng)保留此文檔聲明 History: init. surfsky.cnblogs.com, 2015-01 add initPosition property. 2015-01
【調(diào)用】
控件使用非常簡(jiǎn)單,只要實(shí)現(xiàn) onLoad 和 onLoadMore 事件即可,其他的和標(biāo)準(zhǔn)的ListView差不多。
/** 新聞示例 下拉刷新 上拉分頁(yè) 滾動(dòng)軸 頂部工具欄 頂部工具欄自動(dòng)吸附 當(dāng)前行高亮 Author: surfsky.cnblogs.com 2015-01 */ ListViewEx{ id: view width: 500 height: 800 pageSize: 50 snapHeader: true initPosition: 'header' // 頂部新聞圖片欄 headerComponent: Component{ PageView{ id: pv width: view.width height: 100 clip: true Rectangle{width:pv.width; height:pv.height; color: 'green'} Rectangle{width:pv.width; height:pv.height; color: 'yellow'} Rectangle{width:pv.width; height:pv.height; color: 'blue'} } } // 行UI代理 delegate: Text { id: wrapper; width: parent.width; height: 32; font.pointSize: 15; verticalAlignment: Text.AlignVCenter; horizontalAlignment: Text.AlignHCenter; text: content; //color: ListView.view.currentIndex == index ? "white" : "#505050"; MouseArea { anchors.fill: parent; onClicked: wrapper.ListView.view.currentIndex = index; } } //----------------------------------------- // 數(shù)據(jù)加載事件 //----------------------------------------- onLoad:{ for (var i = 0 ; i < pageSize ; ++i) model.append({"index": i, "content": "Item " + i}) } onLoadMore:{ for (var i = pageSize*page ; i < pageSize*(page+1); ++i) model.append({"index": i, "content": "Item " + i}) } }
【核心代碼】
實(shí)在太長(zhǎng)了,截取ContentY處理部分,其他的下載了看吧
//------------------------------------- // 下拉刷新和上拉分頁(yè)邏輯 //------------------------------------- onMovementEnded: { //console.log("movementEnded: originY:" + originY + ", contentY:" + contentY + ", reflesh:" + needReflesh + ", more:" + needLoadMore); // 刷新數(shù)據(jù) if (needReflesh){ lv.headerItem.goState('load'); model.reflesh(); needReflesh = false; } // 加載新數(shù)據(jù) else if (needLoadMore){ model.loadMore(); needLoadMore = false; } else { var h1 = lv.headerItem.loader.height; var h2 = lv.headerItem.indicator.height; // 頭部區(qū)自動(dòng)顯隱(拖動(dòng)過(guò)小隱藏頭部,反之顯示) if (snapHeader){ if (contentY >= -h1/3 && contentY < 0) moveToFirst(); if (contentY >= -h1 && contentY < -h1/3) moveToHeader(); } // 刷新區(qū)自動(dòng)顯隱 if (contentY >=-(h1+h2) && contentY < -h1) moveToHeader(); } } onContentYChanged: { // 下拉刷新判斷邏輯:已經(jīng)到頭了,還下拉一定距離 if (contentY < originY){ var dy = contentY - originY; if (dy < -10){ lv.headerItem.goState('ready'); needReflesh = true; } else { if (pressed){ //console.log(pressed); //needReflesh = false; // 如何判斷當(dāng)前鼠標(biāo)是否按下?如果是按下?tīng)顟B(tài)才能取消刷新 lv.headerItem.goState(''); } } } // 上拉加載判斷邏輯:已經(jīng)到底了,還上拉一定距離 if (contentHeight>height && contentY-originY > contentHeight-height){ var dy = (contentY-originY) - (contentHeight-height); //console.log("y: " + contentY + ", dy: " + dy); if (dy > 40){ needLoadMore = true; //console.log("originY:" + originY + ", contentY:" + contentY + ", height:" + height + ", contentheight:" + contentHeight); } } }
以上所述是小編給大家介紹的Qt qml中l(wèi)istview 列表視圖控件(下拉刷新、上拉分頁(yè)、滾動(dòng)軸),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
淺析KJFrameForAndroid框架如何高效加載Bitmap
Bitmap是Android系統(tǒng)中的圖像處理的最重要類之一。用它可以獲取圖像文件信息,進(jìn)行圖像剪切、旋轉(zhuǎn)、縮放等操作,并可以指定格式保存圖像文件。本文主要是從KJFrameForAndroid框架中分析高效加載Bitmap的方法2014-07-07Kotlin開(kāi)發(fā)的一些實(shí)用小技巧總結(jié)
Kotlin 是一個(gè)基于 JVM 的新編程語(yǔ)言,用 JetBrains 的話來(lái)說(shuō)是「更現(xiàn)代化、更強(qiáng)大,所以下面這篇文章主要給大家總結(jié)介紹了關(guān)于Kotlin的一些開(kāi)發(fā)實(shí)用小技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-10-10IDEA打包jar-解決找不到或無(wú)法加載主類 main的問(wèn)題
這篇文章主要介紹了IDEA打包jar-解決找不到或無(wú)法加載主類 main的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Android開(kāi)發(fā)App啟動(dòng)流程與消息機(jī)制詳解
這篇文章主要為大家介紹了Android開(kāi)發(fā)App啟動(dòng)流程與消息機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Android自定義View實(shí)現(xiàn)隨機(jī)驗(yàn)證碼
這篇文章主要介紹了Android自定義View實(shí)現(xiàn)隨機(jī)驗(yàn)證碼的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-07-07Android中沒(méi)有插入SD情況下的文件寫(xiě)入和讀取方法
在Android開(kāi)發(fā)時(shí)會(huì)遇到如下一種場(chǎng)合希望應(yīng)用下載到當(dāng)前應(yīng)用的根目錄下,而非SD卡中然后可以隨時(shí)被該應(yīng)用或其他應(yīng)用訪問(wèn)這個(gè)文件,即具有被全局讀取的權(quán)限2012-11-11Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小
這篇文章主要介紹了Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02android異步任務(wù)設(shè)計(jì)思詳解(AsyncTask)
AsyncTask在Android十分常用,那為什么如此常用呢,不用行不行呢,內(nèi)部又是怎么實(shí)現(xiàn)的呢,為什么Java的API中沒(méi)有這個(gè)類呢,看完本文后,你將會(huì)知道答案2014-02-02