Create Spin Progress bar in Qt

2020-04-09 15:49发布

问题:

Create Spin Progress bar in Qt, I want to show progress bar like the one which appears while loading. Please Find Image

My code goes like this

    QProgressBar *pgbar = new QProgressBar();
    pgbar->resize(500,25);
    pgbar->setOrientation(Qt::Horizontal);
    pgbar->setRange(0,99);
    pgbar->setValue(10);
    pgbar->show();
    installOnDevice(destinationSavePath);
    pgbar->hide();

here installOnDevice(destinationSavePath); takes time to process. Currently I am showing Processbar, I dont want to show processbar. Can't I replace with some progress which shows loading image (Rotating) or something similar to that

回答1:

Have a look at the Twitter Mobile example application. In the file demos/declarative/twitter/qml/twitter/TwitterCore/Loading.qml there is an implementation in QML of the exact thing you want to achieve:

import QtQuick 1.0

Image {
    id: loading
    source: "images/loading.png"
    NumberAnimation on rotation {
         from: 0
         to: 360
         running: loading.visible == true
         loops: Animation.Infinite
         duration: 900
     }
}

Update 1 (reflecting the newly posted code):

Employing QML just for a spinning load indicator in your otherwise Qt Widgets based application seems overkill to me. I would use a QMovie in conjunction with a QLabel to display an animated GIF image containing the spinner:

QMovie* spinnerMovie = new QMovie(":/spinner.gif");
QLabel *spinnerLabel = new QLabel(this);
spinnerLabel->setMovie(spinnerMovie);
spinnerMovie->start();

You should also have a look at the documentation for the Qt Resource System to learn how to bundle images with your application and how to load them.



回答2:

In order to change the cursor wou have to use the setCursor function or the setOverrideCursor in order to apply it to the application. You can construct any cursor you want using a QPixmap as constructor argument.

In order to achieve an animation effect you will need a QTimer. At every timer event you have to change the cursor's pixmap in order give the feel of animation.



回答3:

Try Qml Busy Indicator, implemented in pure C++: http://qt-project.org/wiki/Busy-Indicator-for-QML



标签: qt qml