效果图
知识点
1.QProgressBar
2.QTimer
3.信号与槽
思路
核心就是利用定时器的原理,每跑一段时间会发出一个溢出信号,通过绑定这信号和要执行的槽函数,来不断增加进度条的进度。
顺序:
1.UI设计,一个进度条,两个按钮。
2.头文件,< QTimer >别忘了。
3.写代码:
用了3个槽函数:1. void go(); 2. void over(); 3. void timeoutslots();
按开始键,槽函数1启动定时器Timer
按暂停键,槽函数2关闭定时器
通过定时器周期性发送信号,来不断执行槽函数3,对进度条的值进行获取和再赋值操作。
代码
ProgressBar.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_ProgressBar.h"
#include <QTimer>
class ProgressBar : public QWidget
{
Q_OBJECT
public:
ProgressBar(QWidget *parent = Q_NULLPTR);
//槽函数的声明
private slots:
void go();
void over();
void timeoutslots();
private:
Ui::ProgressBar *ui;
//定时器
QTimer *timer;
};
ProgressBar.cpp
#include "ProgressBar.h"
ProgressBar::ProgressBar(QWidget *parent)
: QWidget(parent),
ui(new Ui::ProgressBar)
{
ui->setupUi(this);
//定时器
timer = new QTimer(this);
//连接信号和槽
connect(ui->pushButton_go, SIGNAL(clicked()), this, SLOT(go()));
connect(ui->pushButton_over, SIGNAL(clicked()), this, SLOT(over()));
connect(timer, SIGNAL(timeout()), this, SLOT(timeoutslots()));
//每次定时器溢出信号,都会执行一次timeoutslots函数
}
//开始
void ProgressBar::go()
{
timer->start(100);
//定时器启动,每100ms(0.1秒)会发送一次溢出信号。
}
//暂停或结束
void ProgressBar::over()
{
timer->stop();
//定时器停止
}
//获取进度条的值,并重新赋值
void ProgressBar::timeoutslots()
{
int index = ui->progressBar->value();
index++;
if (index > 100)
{
timer->stop();
return;
}
ui->progressBar->setValue(index);
//先获取进度条的值,并增加
//如果大于100,不用执行
//未大于100,将增加后的值重新赋值。
}
后话
这仅是qt进度条最简单的一种玩法。接触QT不久,欢迎探讨交流,若有漏洞不足,还望批评指正。