Create Spin Progress bar in Qt

2020-04-09 15:59发布

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

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

标签: qt qml
3条回答
家丑人穷心不美
2楼-- · 2020-04-09 16:23

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

查看更多
Animai°情兽
3楼-- · 2020-04-09 16:27

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.

查看更多
疯言疯语
4楼-- · 2020-04-09 16:46

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.

查看更多
登录 后发表回答