QT进度条简单实现
程序员文章站
2022-05-28 20:17:39
...
某些场景需要用进度条并要对进度条快慢进行控制
话不多说,开始步骤:五步曲
下面有效果git图
第一步:往布局中拉一个Progress Bar 和 pushButton
第二步:右键pushButton按钮转到槽函数
第三步:直接上代码吧!! .h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_clicked();
void start();
private:
Ui::MainWindow *ui;
QTimer *qTimer;
int tick =0;
};
#endif // MAINWINDOW_H
第四步:cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->progressBar->setRange(0,100);
ui->progressBar->setValue(0);
ui->progressBar->setOrientation (Qt::Horizontal);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked() // 该函数为第二步的槽函数
{
// 这里用qTimer来控制进度条
qTimer = new QTimer();
connect(this->qTimer, SIGNAL(timeout()), this, SLOT(start()));
qTimer->start(50); // 50可以换成其他数值,越大进度条越慢,越小进度条越快
}
void MainWindow::start()
{
if (tick < 101)
{
ui->progressBar->setValue(tick++);
} else
{
tick = 1;
disconnect(this->qTimer, SIGNAL(timeout()), this, SLOT(start())); // 若断开链接,进度条会一直重复
ui->progressBar->reset(); // 进度条归零
}
}
第五步:效果如下: