欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Roson讲Qt#26 QML之BusyIndicator(转圈圈等待后台操作)

程序员文章站 2024-01-05 15:27:40
...

1.概念

BusyIndicator可用于显示操作正在进行,UI必须等待操作完成。

外观:

Roson讲Qt#26 QML之BusyIndicator(转圈圈等待后台操作)

 

2.使用场合的说明

BusyIndicator类似于不确定进度条。两者都可以用来表示背景活动。主要的区别是视觉上的,ProgressBar还可以显示具体的进度量(如果可以确定的话)。由于视觉上的差异,忙碌的指示器和不确定的进度条适合用户界面中的不同位置。繁忙指示器的典型位置:

  • 在工具栏的一角
  • 覆盖在页面顶部
  • 在ItemDelegate的一侧

3.属性
bool running

此属性保存忙指示器当前是否指示活动。
注意:只有当此属性设置为true时,指示器才可见。默认值为true。

4.使用示例

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    BusyIndicator {
         running: true
     }
}

Roson讲Qt#26 QML之BusyIndicator(转圈圈等待后台操作)

 

5.自定义样式

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    //BusyIndicator由两个视觉项组成:背景(background)和内容项(contentItem)。
    BusyIndicator {
        id: control

        contentItem: Item {
            implicitWidth: 64   //圈圈背景是个矩形,此属性为宽度
            implicitHeight: 64  //圈圈背景是个矩形,此属性为高度

            Item {
                id: item
                x: parent.width / 2 - 32
                y: parent.height / 2 - 32
                width: 64   //圈圈自身的宽度,如果比背景的宽度大的话,圈圈会显示不全
                height: 64  //圈圈自身的高度,如果比背景的高度大的话,圈圈会显示不全
                opacity: control.running ? 1 : 0

                Behavior on opacity {
                    OpacityAnimator {
                        duration: 250
                    }
                }

                RotationAnimator {
                    target: item
                    running: control.visible && control.running
                    from: 0     //旋转的角度,从0到360度
                    to: 360
                    loops: Animation.Infinite   //循环次数,Infinite表示无限次,可以改成数字比如5
                    duration: 1250  //每转一圈需要的时间
                }

                //下面的转换比较麻烦,一般改下颜色就行了
                Repeater {
                    id: repeater
                    model: 6

                    Rectangle {
                        x: item.width / 2 - width / 2
                        y: item.height / 2 - height / 2
                        implicitWidth: 10
                        implicitHeight: 10
                        radius: 5
                        color: "#21be2b"    //圆圈上每个点点的颜色
                        transform: [
                            Translate {
                                y: -Math.min(item.width, item.height) * 0.5 + 5
                            },
                            Rotation {
                                angle: index / repeater.count * 360
                                origin.x: 5
                                origin.y: 5
                            }
                        ]
                    }
                }
            }
        }
    }
}

Roson讲Qt#26 QML之BusyIndicator(转圈圈等待后台操作)

 

上一篇:

下一篇: