`
tcspecial
  • 浏览: 911557 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

QT 模拟任务管理器

    博客分类:
  • QT
阅读更多

    本文实现任务管理器的效果:

    cpu curve

 

   实现思路: 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;
}

 

  • 大小: 111.2 KB
分享到:
评论

相关推荐

    使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip

    使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10....

    使用c++基于Qt框架开发高仿版win10任务管理器.zip

    在本项目中,我们探讨了如何使用C++编程语言与Qt框架来开发一个高仿版的Windows 10任务管理器。Qt是一个跨平台的应用程序开发框架,支持多种操作系统,如Windows、Linux、macOS等。它提供了丰富的图形用户界面(GUI...

    基于C++的任务管理器代码.zip

    - **进程调度**:理解操作系统的调度算法(如FCFS、SJF、优先级调度等)是必要的,任务管理器可能需要模拟这些算法来展示进程的执行顺序。 - **进程通信**:包括共享内存、管道、信号量等方式,任务管理器可能需要...

    Qt模拟Mac Dock效果

    在本文中,我们将深入探讨如何使用Qt框架来模拟Mac操作系统中的Dock效果。Mac Dock是苹果操作系统的一个标志性特性,它提供了一种便捷的方式来管理和切换应用程序。通过Qt,我们可以创建类似的功能,为非Mac平台的...

    模拟任务管理器显示CPU占用的演示

    在IT领域,模拟任务管理器显示CPU占用的程序通常用于教学、测试或系统监控的目的。这类程序能够帮助用户了解计算机的性能状态,特别是在多任务环境下,观察各个进程对CPU资源的消耗情况。以下是对这个主题的详细解释...

    模拟任务管理器显示CPU占用的演示.zip

    "模拟任务管理器显示CPU占用的演示"这个项目可能是一个教学或实验性的程序,旨在帮助用户理解如何通过编程方式来模拟任务管理器的功能,尤其是在监控CPU使用率方面。 CPU占用率是指处理器在特定时间内的工作负荷,...

    操作系统课程设计—任务管理器

    操作系统课程设计—任务管理器是针对Linux环境开发的一款模拟Windows任务管理器的应用,它旨在提供一个用户友好的图形界面,以便用户能够监控和管理运行在Linux系统上的进程。这款任务管理器不仅具备基本的进程查看...

    Qt中使用QQueue模拟消息队列

    首先,QQueue是Qt提供的一种模板类,它基于STL中的queue实现,主要用于存储和管理对象。QQueue的特点是线程安全,可以在多线程环境中方便地进行元素的添加和删除操作。在模拟消息队列时,QQueue通常用来作为待处理...

    操作系统课程设计:使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip

    导入项目文件后,直接编译并运行即可在模拟或实际设备上看到任务管理器的应用效果。 总结,这个项目提供了学习和实践C++与Qt结合开发的机会,同时也有助于理解操作系统层面的进程管理和性能监控。通过完成这样的...

    操作系统课程设计,使用c++基于Qt框架开发的任务管理器,ui仿照win10.zip

    4. **启动/关闭服务**:模拟Windows任务管理器中的服务管理功能,能够查看和操作系统服务。 5. **资源监视**:监控磁盘I/O和网络流量,提供可视化展示。 6. **用户界面设计**:仿照Win10的任务管理器,创建清晰、...

    模仿的windows的任务管理器VC源代码

    《模仿Windows任务管理器的VC源代码解析》 在编程领域,模仿是学习的重要途径,尤其是在操作系统级别的应用开发中。Windows任务管理器是系统管理的核心工具,它提供了查看和控制运行在系统上的进程、线程、性能数据...

    C++、qt环境下的模拟操作系统多级反馈轮转法 或者说动态排序

    在本实验中,我们将探讨如何在C++编程环境中利用Qt库来模拟操作系统的多级反馈轮转法(Multi-Level Feedback Queue, MLFQ),并结合动态排序算法来优化任务调度。多级反馈轮转法是一种常见的进程调度策略,旨在平衡...

    一个用Qt来绘制虚拟仪器仪表

    其中,drawfunctions可能包含了绘制仪表盘的具体算法,而plugin和taskmenu则涉及到了插件系统和任务管理。 3. qmeterplugin.doxyfile:这是Doxygen配置文件,用于生成项目的API文档。通过Doxygen,开发者可以自动...

    qt5多线程pingIP地址(线程池)

    总的来说,"qt5多线程pingIP地址(线程池)"是一个结合了Qt5的多线程、线程池管理以及外部工具fping的实用应用程序,旨在高效地检查大量IP地址的网络连通性。通过合理的设计和实现,可以显著提升网络诊断的效率。

    进程管理器的模拟实现

    在这个课程设计中,学生被要求模拟实现一个进程管理器,这有助于深入理解操作系统如何管理和控制进程的生命周期,以及它们如何共享和竞争系统资源。 首先,我们要了解进程的基本概念。进程是程序在计算机中的一个...

    基于QT开发的人机交互界面,操作系统课程设计,模拟操作系统,.zip

    在QT应用中,你可以设计一个进程管理模块来模拟创建、撤销、切换和调度进程的功能。这可能涉及到理解线程的概念,以及如何使用QT的QThread类来处理并发任务。 **内存管理**:这部分涉及如何分配和回收内存。在模拟...

    运动控制器galil通信Qt代码

    总的来说,"运动控制器galil通信Qt代码"是一个利用Qt框架和Galil通信协议实现的上位机程序,它能够与Galil运动控制器进行有效的数据交换,从而控制和监控运动任务。这个项目展示了Qt在工业控制领域的应用,以及如何...

Global site tag (gtag.js) - Google Analytics