Linux下获取系统的磁盘使用情况、内存使用情况使用QT界面进行显示

2022-01-12 11:21:19 浏览数 (1)

一、环境介绍

操作系统: ubuntu 18.04 64位 PC机

QT版本: 5.12

二、运行效果图

三、核心代码

mainwindow.cpp代码:

代码语言:javascript复制
#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
#include <QDebug>
#include <sys/sysinfo.h>
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer::singleShot(1000, this, SLOT(GetSystemInfo()));
}

void Widget::GetSystemInfo(void)
{
    /*1. 获取当前系统磁盘使用情况*/
    /*
     * 格式:  /dev/sda1        49G   38G  9.3G   81% /
     */
    QProcess process;
    process.start("df -h");
    process.waitForFinished();
    QByteArray output = process.readAllStandardOutput();
    QString str_output = output;
    str_output=str_output.mid(str_output.indexOf("/dev/sda1"));
    //得到: /dev/sda1        49G   38G  9.3G   81%
    str_output=str_output.section('/',0,2);
    str_output=str_output.section(' ',1);
    //将多个空格换成单个空格
    str_output=str_output.replace(QRegExp("[\s] "), " ");

    QString text;
    text="磁盘总容量: " str_output.section(' ',1,1) "n";
    text ="已用: " str_output.section(' ',2,2) "n";
    text ="可用: " str_output.section(' ',3,3);
    //获取百分比
    ui->progressBar_rom->setValue(str_output.section(' ',4,4).section('%',0,0).toInt());
    ui->label_ROM->setText(text);

    /*2. 获取当前系统内存使用情况*/
    struct sysinfo s_info;
    if(sysinfo(&s_info)==0)
    {
        text=tr("总内存: %1 KBn").arg(s_info.totalram/1024);
        text =tr("未使用内存: %1 KBn").arg(s_info.freeram/1024);
        text =tr("交换区总内存: %1 KBn").arg(s_info.totalswap/1024);
        text =tr("交换区未使用内存: %1 KBn").arg(s_info.freeswap/1024);
        text =tr("系统运行时间: %1s").arg(s_info.uptime);
        ui->label_RAM->setText(text);
    }
     QTimer::singleShot(1000, this, SLOT(GetSystemInfo()));
}

Widget::~Widget()
{
    delete ui;
}

mainwindow.h代码:

代码语言:javascript复制
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void GetSystemInfo(void);
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

0 人点赞