本文实现任务管理器的效果:
实现思路: 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; }
相关推荐
使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10....
基于QT的系统
模仿的windows的任务管理器 ,如果你想获得相关的知识点,本代码里都有了,比如如何关进程,获取进程的线程数,获取进程的句柄数等等!!!
【作品名称】:基于QT开发的人机交互界面,模拟操作系统,具有进程管理,内存管理,磁盘管理,文件系统,设备管理(源码+实验报告) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
课设-基于QT和C++开发的人机交互的模拟操作系统源码+详细项目说明(含进程内存文件系统设备管理).zip 模块划分: (1)、进程管理模块 (2)、内存管理模块 (3)、文件管理模块 (4)、设备管理模块 (5)、界面管理...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
总结: 原打算包括详细设计在内全部设计完成后开始动工, 结果概要设计阶段, 建表分歧大, 模拟 查询过程中出现冲突, 最终决定初次建表, 在需求任务阶段 环境搭建完成 环境: Qt 5.9.3 + MySQL 8.0.12 + navicat 12.026 ...
那么怎样才能做到向上管理呢,有任务分配给老板怎么办? 老板会设立一个机构,也就是一个函数,用无限循环来查询助理的状态,如果助理真的有事情,这个机构就把这消息拿到老板来处理。但是这种处理方式显得有些复杂...
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++、...