本文实现任务管理器的效果:
实现思路: 1. 不断减小x坐标值,使得网格线平移 2. 将cpu使用率放入一固定数组中, 遍历数组选取相邻两点画直线.
dialog.h
#ifndef DIALOG_H #define DIALOG_H #include <QDialog> class Dialog:public QDialog { Q_OBJECT public: Dialog(QWidget *parent=0); ~Dialog(); protected: void paintEvent(QPaintEvent *); void timerEvent(QTimerEvent *); float usage() const; private: QPixmap pixmap; int base; int columnInc; // 动态列偏移值 int *pts; // 随机数据数组 int mLen; // 记录数组长度 int ptNum; // 点数目 }; #endif
dialog.cpp
#include "dialog.h" #include <QtGui> Dialog::Dialog(QWidget *parent):QDialog(parent) { this->setWindowTitle(tr("内存监控")); this->resize(480,450); pts=NULL; base=10; // 边界基数为10 columnInc=0; // 黑色背景图 pixmap=QPixmap(width()-base*2,height()-base*2); pixmap.fill(Qt::black); // 定时器刷新线条 startTimer(1000); } Dialog::~Dialog() { if(pts) delete pts; } void Dialog::paintEvent(QPaintEvent *e) { QPainter painter(this); // 线条色 QPen pen(QColor(46, 139, 87),1.0); painter.setPen(pen); // 在图像上作画 painter.drawPixmap(10,10,pixmap); int graphW=pixmap.width(); int graphH=pixmap.height(); // 画15行直线 int graphRow=graphH/15; for(int i=base;i<=graphH+base;i+=graphRow) { painter.drawLine(base,i,base+graphW,i); } // 动态列指示参数 int graphColumn=graphW/15; if(columnInc==0) { columnInc=graphColumn; } // 画15列直线 for(int j=base+columnInc;j<graphW+base;j+=graphColumn) { painter.drawLine(j,base,j,base+graphH); } --columnInc; // 改变x坐标值,使曲线产生运动效果 if(pts==NULL) { pts=new int[graphW]; mLen=graphW; ptNum=0; }else { painter.setPen(QPen(Qt::yellow,1.0)); // 产生随机数模拟CPU使用情况 pts[ptNum]=base+graphH*usage(); // 遍历数组,从后面开始画曲线 for(int j=base+graphW-ptNum,k=0;k<ptNum;k++,j++) { if(k!=0) { if(pts[k]!=pts[k-1]) { painter.drawLine(j-1,pts[k-1],j,pts[k]); // 画直线 }else { painter.fillRect(j,pts[k],1,1,Qt::SolidPattern); // 相等则画矩形 } } } if(ptNum+2==mLen) // 曲线到达最左端 { for(int i=1;i<ptNum;i++) { pts[i-1]=pts[i]; // 舍弃最前面2点,从后向前赋值 } --ptNum; }else // 曲线在中间 { ptNum++; } } } void Dialog::timerEvent(QTimerEvent *e) { // 定时刷新界面 update(); } float Dialog::usage() const { // 用当前时间设置种子 QTime time=QTime::currentTime(); qint64 msecs=time.second()*1000+time.msec(); qsrand(msecs); // 取(0-1)间小数值 float usage=0.0; while(true) { usage=(qrand()%100)/100.0; if(usage>0.1&&usage<0.9) break; } return usage; }
相关推荐
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
STM32模拟下位机信号采集,stm32f103x板: uCos-II多任务处理,LED模块程序正常运行的指示灯,中断0模拟车辆检测器的采集量到达(实际载重量,车辆基本信息数据),AD转换模块模拟称重传感器的返回值,数码管显示累计...
(2)能够根据订报要求进行订购报纸,并完成一次订购任务后的汇总总金额,模拟付款 等功能 (3)能够查询某客户的定刊情况并显示相关报刊信息 (4)能够实现用户管理功能:例如用户登录,个人信息修改页面等 (5)...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、...
8.3 嵌入式系统的任务管理 8.3.1 单道程序设计和多道程序设计 8.3.2 进程、线程和任务 8.3.3 任务的实现 8.3.4 任务的调度 8.3.5 实时系统调度 8.4 嵌入式系统的存储管理 8.4.1嵌入式存储管理方式的特点 8.4.2存储...