Linux下獲取系統的磁盤使用情況、內存使用情況使用QT界面進行顯示

一、環境介紹

操作系統:  ubuntu 18.04 64位  PC機

QT版本:  5.12

二、運行效果圖

三、核心代碼

mainwindow.cpp代碼:

#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 KB\n").arg(s_info.totalram/1024);
        text+=tr("未使用內存: %1 KB\n").arg(s_info.freeram/1024);
        text+=tr("交換區總內存: %1 KB\n").arg(s_info.totalswap/1024);
        text+=tr("交換區未使用內存: %1 KB\n").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代碼:

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章