程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++設計形式之原型形式

C++設計形式之原型形式

編輯:關於C++

C++設計形式之原型形式。本站提示廣大學習愛好者:(C++設計形式之原型形式)文章只能為提供參考,不一定能成為您想要的結果。以下是C++設計形式之原型形式正文


Qt qml listview下拉刷新和上拉分頁重要依據contentY來斷定。但要加上頂手下拉指導器、轉動條,並封裝成可簡略挪用的組件,實在花了我很多精神:)

先給年夜家展現下後果圖:


【功效】

下拉刷新和上拉分頁邏輯
/下拉刷新
/上拉更多
/轉動欄
/對象欄半拉顯隱
Author: surfsky.cnblogs.com
Lisence: MIT 請保存此文檔聲明
History:
init. surfsky.cnblogs.com, 2015-01
add initPosition property. 2015-01

【挪用】

控件應用異常簡略,只需完成 onLoad 和 onLoadMore 事宜便可,其他的和尺度的ListView差不多。

/**
消息示例
下拉刷新
上拉分頁
轉動軸
頂部對象欄
頂部對象欄主動吸附
以後行高亮
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;
}
}
//-----------------------------------------
// 數據加載事宜
//-----------------------------------------
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})
}
}

【焦點代碼】

其實太長了,截取ContentY處置部門,其他的下載了看吧

//-------------------------------------
// 下拉刷新和上拉分頁邏輯
//-------------------------------------
onMovementEnded: {
//console.log("movementEnded: originY:" + originY + ", contentY:" + contentY + ", reflesh:" + needReflesh + ", more:" + needLoadMore);
// 刷新數據
if (needReflesh){
lv.headerItem.goState('load');
model.reflesh();
needReflesh = false;
}
// 加載新數據
else if (needLoadMore){
model.loadMore();
needLoadMore = false;
}
else {
var h1 = lv.headerItem.loader.height;
var h2 = lv.headerItem.indicator.height;
// 頭部區主動顯隱(拖動太小隱蔽頭部,反之顯示)
if (snapHeader){
if (contentY >= -h1/3 && contentY < 0)
moveToFirst();
if (contentY >= -h1 && contentY < -h1/3)
moveToHeader();
}
// 刷新區主動顯隱
if (contentY >=-(h1+h2) && contentY < -h1)
moveToHeader();
}
}
onContentYChanged: {
// 下拉刷新斷定邏輯:曾經到頭了,還下拉必定間隔
if (contentY < originY){
var dy = contentY - originY;
if (dy < -10){
lv.headerItem.goState('ready');
needReflesh = true;
}
else {
if (pressed){
//console.log(pressed);
//needReflesh = false; // 若何斷定以後鼠標能否按下?假如是按下狀況能力撤消刷新
lv.headerItem.goState('');
}
}
}
// 上拉加載斷定邏輯:曾經究竟了,還上拉必定間隔
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中listview 列表視圖控件(下拉刷新、上拉分頁、轉動軸),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved