前言不知道大家注意没有,当下载一首歌曲或者安装某个软件的时候,通常界面上会显示一个进度条,提示现在的下载或者是安装进度。我们这一节要讲的ProgressBar,也是这样的一种用途。ProgressBar的概念ProgressBar表示操作的进度。进度由value定期更新,范围有from和to定义,两者都可以包含任何值。因为ProgressBar属于控件,所以我们在使用时,需要导入控件类。import QtQuick.Controls 2.3 ProgressBar还可以支持特殊的indeterminate模式,当无法确定正在下载的项目大小,或者由于网络断开而导致下载进度中断时,这种模式很有用。这样说大家可能不太能够理解,没有关系,后面我们会给出例程。 ProgressBar的属性
例程练习结合上一节讲的布局管理,我们在界面上展示几种不同的ProgressBar,首先,先来一种最简单的,静态ProgressBar。新建一个工程,输入以下代码。Column{
anchors.centerIn: parent
anchors.margins: 50
spacing: 50
//进度条1
ProgressBar{
from: 0.0
to:0.6
value: 0.3
width: 100
height: 20
}
}在Column定位器中先放置第一种进度条,长度为100,范围从0.0-0.6,进度值为0.3,所以效果应该是一个50%的进度条。如下图所示。 这种属于静态的进度条,那么动态的如何实现呢?这就需要结合之前学过的定时器事件了,可以通过1s更新一次value值的方式实现一个动态的进度条。还是在Column定位器中添加第二种进度条。 //进度条2
ProgressBar{
value: 0.1
width: 100
height: 2
Timer{
interval: 1000
repeat: true
running: true
onTriggered: {
if(parent.value < 1.0){
parent.value += 0.1
}else{
stop()
}
}
}
}设置一个1s触发一次的定时器,每次触发时,判断当前的进度值是否大于最大值1.0,大于1.0就停止定时器,没有的话进度值就一直累加,实现一个1s变化一次的进度条。实现效果如下。 前面说到,ProgressBar还支持特殊的indeterminate模式。当我们无法确定项目下载的进度值是多少时,盲目的等待只会加重用户的焦躁,而这种模式正是为了减缓焦虑感的。实现方法也很简单,只需要将indeterminate属性设置为true即可。 //进度条3
ProgressBar{
value: 0.2
width: 100
height: 20
//当indeterminte设置为真实, ProcessBar变成了BusyIndicator了
indeterminate: true
}运行程序,效果如下。 最后一种当然就是我们的自定义的进度条控件了,可以设置进度条的颜色和样式,这里我们通过官方例程来讲解一下。 //进度条4
ProgressBar{
id:control
value: 0.2
width: 100
height: 2
background: Rectangle {
implicitWidth: control.width
implicitHeight: control.height
color: "orange"
radius: 3
}
contentItem: Item {
Rectangle {
width: control.visualPosition * control.width
height: control.height
radius: 2
color: "green"
}
}
}ProgressBar也有两个可视项:background和contentitem,先来设置background背景项,其宽和高等于ProgressBar的宽和高,颜色为orange,圆滑度为3。大家可以先运行看看,ProgressBar变成了橘黄色的矩形。然后再来设置contentitem内容项,宽度的计算公式为ProgressBar的视觉位置*ProgressBar的宽度。高度随便,颜色和平滑度也可以自行设置。OK!运行效果看一下 注:效果可能因为qt的版本有轻微的差别。 总结 |