最近比较忙,几乎没什么时间来整理所做所学的东西。本来早该写的,拖了好几天了。
前一篇随笔里计划要将系统监控工具做成实时的,那么如何做呢?关键就在于定时器的运用。利用定时器,每隔一定的时间间隔去读取相应文件里的信息,然后刷新显示,就能够实现这一功能。很幸运的是Qt自身提供了两种定时器类:一类是Qtimer类;另一类是QObject类的定时器。这里我是用的是QTimer,觉得比较方便简单。
使用示例:
QTimer *testtimer = new QTimer(this); connect(testtimer,SIGNAL(timeout()),this,SLOT(Displayfunction())); testtimer->start(1000); //ms
在本示例程序中,我用定时器来动态更新内存信息和负载信息,如下图所示。上一篇随笔中,以MB为单位的显示信息没有包含小数点以后的值,太不精确了,所以得先将得到的字符串类型的结果转换为浮点数类型,然后除以1024,再转换为字符串类型显示出来:
关键代码如下:
QTimer *testtimer = new QTimer(this); connect(testtimer,SIGNAL(timeout()),this,SLOT(DisplayLoadInfo())); connect(testtimer,SIGNAL(timeout()),this,SLOT(DisplayMemInfo()));
testtimer->start(1000); //start timer of loadinfo every 1 second
首先定义一个定时器testtimer,然后将超时信号和更新信息函数关联起来,最后设置超时时间为1秒,即每一秒钟刷新一次,使用LCD number控件将得到的负载信息显示出来即可,而前一篇中多余的push_button已经没有用了,果断删掉,显示函数如下(定义LoadInfo load_info):
void MainWindow::DisplayLoadInfo() { TestLoadInfo(); ui->lcdNumber_2->display(load_info.m_OneMin); ui->lcdNumber_3->display(load_info.m_FivMin); ui->lcdNumber_1->display(load_info.m_FiftMin); }
负载信息类定义如下:
class LoadInfo{ public: double m_OneMin; double m_FivMin; double m_FiftMin; };
project下载地址:https://code.google.com/p/system-in-view/downloads/list