QT實現Linux下系統監控小工具


       由於過段時間得幫師兄做一個linux下的圖形化測試程序,所以最近開始學習Qt,感覺Qt用起來挺方便簡單的,上手還算比較快吧,近兩天就寫了一個用來監控系統的小工具,功能尚不完善,還在探索,覺得也有必要記錄下工作同時還得弄清楚類似任務管理器的東東是怎么得到系統數據和性能的~~

  閑話少說,Qt的安裝過程就十分費勁,前段時間由於官網服務器(http://Qt-project.org/downloads)自己的問題,每次下到一半多就自動斷了,都快崩潰了......要使用Qt必須有Qtlibray和QtCreator,最新的版本是5.0,需要有較高版本的GLIBC和GLIBCXX的支持,具體多少版本可以我忘了......反正比較新的就行了,不然安裝不能成功。i

  Qt使用的對象與方法通信的機制稱為信號和槽機制,這也是Qt特點之一。由於我以前接觸過MFC,所以個人感覺和window編程中的消息與消息處理函數很類似,不知到誰前誰后。

  具體講,Qt的基類QObject中有一個成員函數來完成信號和槽的關聯。函數原型如下:

#include <QObject>

static bool QObject::connect(const QObject *sender,const char *signal,const Qbject *receiver,const char *member);

  其中sender為發送信號的控件,receiver為接受信號的控件,member為槽函數。

  本着學習的態度,開始做一個系統監控工具,其中使用到了QTableWidget,QTabWidget,Graphics View,Push Button,MenuBar等控件,基本界面如下:

           

   由於不了解任務管理器的原理,我就想linux下一般都能在/proc/目錄下查看cpuinfo,meminfo等文件來查看系統信息,是不是可以讀取這些文件內容,然后將單擊Button與顯示內容進行關聯,似乎是可行的。以內存子Tab為例,單擊Mem-start按鈕,得到實時的內存,交換區,緩沖等信息,每次點擊Mem-start后信息會刷新,但暫時還不能自動動態刷新,估計得搞個定時器神馬的才行,算是下一步計划吧。

          

  cat  /proc/meminfo,發現文件格式很規整,所以我想每次從文件中讀一個字符串,要得到MemTotal信息,就先檢測,若讀到MemTotal:,則再向后讀一個字符串,然后將結果保存給特定的類,之后傳遞給DisplayMemInfo函數,顯示之(讀取文件並判斷的代碼太丑,樓主就不好意思貼出來了~)。

class MemInfo{
public:
    string MemTotal;
    string MemFree;
    string Buffers;
    string Cached;
    string SwapTotal;
    string SwapFree;
};

  上面數據結構用於保存讀到的memory相關信息。

void MainWindow::DisplayMemInfo()
{
    TestMemInfo();
    ui->tableWidget_2->setItem(0,0,new QTableWidgetItem(mem_infoKB.MemTotal.c_str()));
    ui->tableWidget_2->setItem(0,1,new QTableWidgetItem(mem_infoKB.MemFree.c_str()));
    ui->tableWidget_2->setItem(0,2,new QTableWidgetItem(mem_infoKB.Buffers.c_str()));
    ui->tableWidget_2->setItem(0,3,new QTableWidgetItem(mem_infoKB.Cached.c_str()));
    ui->tableWidget_2->setItem(0,4,new QTableWidgetItem(mem_infoKB.SwapTotal.c_str()));
    ui->tableWidget_2->setItem(0,5,new QTableWidgetItem(mem_infoKB.SwapFree.c_str()));

    ui->tableWidget_2->setItem(1,0,new QTableWidgetItem(mem_infoMB.MemTotal.c_str()));
    ui->tableWidget_2->setItem(1,1,new QTableWidgetItem(mem_infoMB.MemFree.c_str()));
    ui->tableWidget_2->setItem(1,2,new QTableWidgetItem(mem_infoMB.Buffers.c_str()));
    ui->tableWidget_2->setItem(1,3,new QTableWidgetItem(mem_infoMB.Cached.c_str()));
    ui->tableWidget_2->setItem(1,4,new QTableWidgetItem(mem_infoMB.SwapTotal.c_str()));
    ui->tableWidget_2->setItem(1,5,new QTableWidgetItem(mem_infoMB.SwapFree.c_str()));
}  

     最后是菜單上的關於信息窗口,相信每個圖形化項目都有一個關於信息框用於顯示制作公司或人員信息以及版本號,圖標之類的信息,看起來還湊合~ ,計划下一步是將得到的數據弄成圖形形式的,這樣更直觀,也符合可視化這種需求:-)

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM