在Qt中有很多需要以一定的频率刷新显示的需求,这时就要用到定时器,这个定时器就是在超时的时候发送信号,然后收到信号后做一些处理即可;然后定时器会重启,继续以之前设定的时间,开始倒计时。以下为一个测试代码:
#ifndef TEST_H
#define TEST_H
#include <QWidget>
#include <QLabel>
#include <QTimer>
class Mywidget: public QWidget
{
Q_OBJECT
public:
Mywidget(QWidget *parent = 0);
~Mywidget();
public slots:
void RefreshRate();
private:
QLabel sent_rate_name;
QLabel recv_rate_name;
QLabel sent_rate;
QLabel recv_rate;
QTimer *mytimer;
void modulesShow();
};
#endif //
#include "test.h"
//View
Mywidget::Mywidget(QWidget *parent) :
QWidget(parent)
{
//set parent
sent_rate_name.setParent(this);
sent_rate.setParent(this);
recv_rate_name.setParent(this);
recv_rate.setParent(this);
//set text
recv_rate_name.setGeometry(QRect(50, 225, 70, 20));
sent_rate_name.setGeometry(QRect(210, 225, 70, 20));
recv_rate.setGeometry(QRect(130, 225, 70, 20));
sent_rate.setGeometry(QRect(300, 225, 70, 20));
sent_rate_name.setText("上传速度:");
recv_rate_name.setText("下载速度:");
mytimer = new QTimer(this);
connect(mytimer, SIGNAL(timeout()), this, SLOT(RefreshRate())); //定时器处理函数
mytimer->start(1000);//开始定时,并设置定时时间
modulesShow();
}
Mywidget::~Mywidget()
{
}
void Mywidget::modulesShow()
{
sent_rate_name.show();
recv_rate_name.show();
sent_rate.show();
recv_rate.show();
}
void Mywidget::RefreshRate()
{
sent_rate.setText(format_show(0,global_sent));
recv_rate.setText(format_show(0,global_rcvd));
}