QT最简单进度条实现

用qt实现一个最简单的进度条

    • 效果图
    • 知识点
    • 思路
    • 代码
    • 后话

效果图

QT最简单进度条实现_第1张图片

知识点

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 
#include "ui_ProgressBar.h"
#include 

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不久,欢迎探讨交流,若有漏洞不足,还望批评指正。

你可能感兴趣的:(qt,ui,开发语言)