欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

QML用PathView實(shí)現(xiàn)輪播圖

 更新時(shí)間:2020年06月03日 08:42:29   作者:龔建波  
這篇文章主要為大家詳細(xì)介紹了QML用PathView實(shí)現(xiàn)輪播圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

輪播圖是一個(gè)常見的功能,在QML中,可以使用PathView來實(shí)現(xiàn)一個(gè)循環(huán)播放的輪播圖組件。

默認(rèn)情況,如果限制了加載個(gè)數(shù),切換時(shí)第一幀會(huì)馬上消失,第二幀才進(jìn)入,這樣會(huì)有斷檔的感覺。通過設(shè)置PathView中preferredHighlightBegin/End為0.5,這樣當(dāng)前選定的項(xiàng)位于路徑的中間,就沒有斷檔的感覺了。效果如下(為了測(cè)試,我沒有clip,clip之后只有范圍內(nèi)的才可見):

//CircleView.qml

import QtQuick 2.12
import QtQuick.Controls 2.12
 
//輪播圖
Item {
 id: control
 
 property int indicatorWidth: 12
 
 //定時(shí)切換間隔
 property alias timerInterval: path_timer.interval
 //切換動(dòng)畫執(zhí)行時(shí)間
 property alias pathDuration: path_view.highlightMoveDuration
 property alias delegate: path_view.delegate
 property alias model: path_view.model
 //頁(yè)數(shù)
 property alias count: path_page.count
 
 PathView{
 id: path_view
 anchors.fill: parent
 
 //此屬性保存任何時(shí)候在路徑上可見的項(xiàng)目數(shù)。
 //將pathItemCount設(shè)置為undefined將顯示路徑上的所有項(xiàng)目。
 //因?yàn)閜ath代碼的問題,設(shè)置為2最合適
 pathItemCount: 2
 
 //測(cè)試時(shí),把clip去掉就能看到完整的
 //clip: true
 
 //向前移動(dòng),即順序0 1 2 3
 movementDirection: PathView.Positive
 
 //切換的時(shí)間
 highlightMoveDuration: 1000
 
 //視圖中突出顯示(當(dāng)前項(xiàng)目)的首選范圍,默認(rèn)值PathView.StrictlyEnforceRange
 //配合preferredHighlight的范圍0.5 0.5,就能顯示在正中,切換更自然
 //highlightRangeMode: PathView.StrictlyEnforceRange
 
 //希望當(dāng)前選定的項(xiàng)位于路徑的中間,則將突出顯示范圍設(shè)置為0.5,0.5
 preferredHighlightBegin: 0.5
 preferredHighlightEnd: 0.5
 path: Path {
  startX: -path_view.width/2
  startY: path_view.height / 2
 
  PathLine {
  x: path_view.pathItemCount * path_view.width-path_view.width / 2
  y: path_view.height / 2
  }
 }
 onModelChanged: {
  if(path_timer.running){
  path_timer.restart();
  }
 }
 
 //測(cè)試用
 //model: ["red","green","blue"]
 //delegate: Rectangle{
 // width: path_view.width
 // height: path_view.height
 // color: modelData
 //}
 }
 //定時(shí)切換
 Timer{
 id: path_timer
 running: control.visible
 repeat: true
 interval: 3000
 onTriggered: {
  //至少兩個(gè)才切換
  if(path_view.count>1)
  path_view.currentIndex=(path_view.currentIndex+1)%path_view.count
 }
 }
 //右下角小圓圈
 PageIndicator {
 id: path_page
 anchors{
  right: parent.right
  bottom: parent.bottom
  margins: 30
 }
 count: path_view.count
 currentIndex: path_view.currentIndex
 spacing: control.indicatorWidth
 delegate: Rectangle{
  width: control.indicatorWidth
  height: width
  radius: width/2
  color: "white"
  //非當(dāng)前頁(yè)就灰色
  opacity: index===path_page.currentIndex?1:0.6
  Behavior on opacity {
  OpacityAnimator{
   duration: 200
  }
  }
  //點(diǎn)擊跳轉(zhuǎn)到該頁(yè)
  //還有問題,非連續(xù)的item,他會(huì)快速連續(xù)切換到目標(biāo)index
  //因?yàn)椴皇侵苯忧袚Q,有閃爍的感覺
  MouseArea{
  anchors.fill: parent
  onClicked: {
   path_view.currentIndex=index;
   if(path_timer.running){
   path_timer.restart();
   }
  }
  }
 }
 }
}

//main.qml  

測(cè)試了不同的Item個(gè)數(shù)

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
 
Window {
 visible: true
 width: 700
 height: 500
 title: qsTr("龔建波 1992")
 
 color: "#021B39"
 
 Column{
 anchors.centerIn: parent
 spacing: 10
 CircleView{
  width: 100
  height: 50
  model:["red","green","blue","orange"]
 
  delegate: Rectangle {
  width: 100
  height: 50
  color: modelData
  //Component.onCompleted: console.log(modelData,"completed")
  }
 
  Rectangle{
  anchors.fill: parent
  color: "transparent"
  border.color: "white"
  }
 }
 CircleView{
  width: 100
  height: 50
  model:["red","green","blue"]
 
  delegate: Rectangle {
  width: 100
  height: 50
  color: modelData
  //Component.onCompleted: console.log(modelData,"completed")
  }
 
  Rectangle{
  anchors.fill: parent
  color: "transparent"
  border.color: "white"
  }
 }
 CircleView{
  width: 100
  height: 50
  model:["red","green"]
 
  delegate: Rectangle {
  width: 100
  height: 50
  color: modelData
  //Component.onCompleted: console.log(modelData,"completed")
  }
 
  Rectangle{
  anchors.fill: parent
  color: "transparent"
  border.color: "white"
  }
 }
 CircleView{
  width: 100
  height: 50
  model:["red"]
 
  delegate: Rectangle {
  width: 100
  height: 50
  color: modelData
  //Component.onCompleted: console.log(modelData,"completed")
  }
 
  Rectangle{
  anchors.fill: parent
  color: "transparent"
  border.color: "white"
  }
 }
 CircleView{
  width: 100
  height: 50
 
  delegate: Rectangle {
  width: 100
  height: 50
  color: modelData
  //Component.onCompleted: console.log(modelData,"completed")
  }
 
  Rectangle{
  anchors.fill: parent
  color: "transparent"
  border.color: "white"
  }
 }
 }
}

借鑒:鏈接

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論