QT WINDOWS ETH 测试防呆程式

ETH_TEST.PRO SOURCE CODE:

#-------------------------------------------------
#
# Project created by QtCreator 2018-07-05T07:59:05
#
#-------------------------------------------------
 
 
QT       += core gui
 
 
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
 
 
TARGET = ETH_TEST
TEMPLATE = app
 
 
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
 
 
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
 
 
 
SOURCES += \
        main.cpp \
        eth_test.cpp
 
 
HEADERS += \
        eth_test.h
 
 
FORMS += \
        eth_test.ui
RC_FILE=icon.rc
 
 

ETH_TEST.H SOURCE CODE:

#ifndef ETH_TEST_H
#define ETH_TEST_H
 
 
#include <QMainWindow>
#include <QFile>
#include <QIODevice>
#include <QString>
#include <QDebug>
#include <QDebug>
#include <QTextStream>
#include <QDialog>
//#include <QWidget>
#include <stdio.h>
#include <io.h>
#include <iostream>
#include <QtGui>
#include <QMessageBox>
#include <QTableWidget>
#include <QStringList>
#include <QTimer>
#include <QStringList>
#include <QTextCodec>
#include <QCloseEvent>
#include <QProcess>
#include <QThread>
#include <QBrush>
#include <QColor>
#include <QDateTime>
#include <iostream>
#include <QFile>
 
 
namespace Ui {
class ETH_TEST;
}
 
 
class ETH_TEST : public QMainWindow
{
    Q_OBJECT
 
 
public:
    explicit ETH_TEST(QWidget *parent = 0);
    ~ETH_TEST();
protected:
    void closeEvent(QCloseEvent *);
private:
    Ui::ETH_TEST *ui;
    QTimer *m_timer=new QTimer(this);
    QTimer *EndWin=new QTimer(this);
    QTimer *RunWin=new QTimer(this);
    QTimer *TesttoCheck=new QTimer(this);
    double EveryprogressValues=0.0;//每次进度条增长值
    double progressTotalValues=0.0;//进度条执行总值
    int SetprogressTotalValues=0;//设置进度最大值
    int secondnumber=0;
    int Callen=0; //读取算率行数
    int Temlen=0;//读取温度行数
    QStringList ConfiArgc;
    QStringList Calcalate_rate_Value;//算率值
    QStringList Temperature_Value;//温度值
    bool IsAllStatePas=true;//所有数据状态
    QProcess *process=new QProcess;
    bool IsNotTime=false;
private slots:
    bool ReadCfgInfo(QString FileName);
    void InitialTableSlot();
    void StartQProgressBarSlot(int runtimer);
    void timernumber();
    void StartSupportForChinese();
    bool CallAnExternalProgram(QString exe);
    void start_read_output();
    void start_read_err_output();
    void Close_WndFailSlot();
    void Close_WndPassSlot();
    void finish_process(int exitCode,QProcess::ExitStatus exitStatus);
    void sleepslot(unsigned int msec);
    void ProcessSortStrSlot();//处理文本框中的字符串
    void FillTableData(QString str,int Item);//填充表格内数据
    void TestFailSlot();
    void SaveTestData();
    void InitialDelFile();
    void ProcessKill();//结束进程
};
 
 
#endif // ETH_TEST_H
 
 

ETH_TEST.CPP SOURCE CODE:

#include "eth_test.h"
#include "ui_eth_test.h"
#include <QPalette>
#include <QColor>
 
 
ETH_TEST::ETH_TEST(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::ETH_TEST)
{
    ui->setupUi(this);
    if(ReadCfgInfo("config.ini")==true)
    {
        this->ProcessKill();//关闭进程
        InitialDelFile();//初始化删除Make文件
        InitialTableSlot();//初始化表格
        StartSupportForChinese();//启动Qt对中文支持
        this->Callen=QString(this->ConfiArgc[3]).toInt();//设置取消读取的数据轮数
 
 
        //启动进度条
        StartQProgressBarSlot(QString(ConfiArgc[0]).toInt());//启动计时器
        if(CallAnExternalProgram(QString(ConfiArgc[1]))==false)//启动脚本
        {
            QObject::connect(EndWin,SIGNAL(timeout()),this,SLOT(close()));//启动报错程式退出
            EndWin->start(1000);
        }
        QObject::connect(RunWin,SIGNAL(timeout()),this,SLOT(ProcessSortStrSlot()));//处理文本框中的字符串
        RunWin->start(3000);
        QObject::connect(RunWin,SIGNAL(timeout()),this,SLOT(Close_WndPassSlot()));//启动退出窗体
        RunWin->start(100);
        QObject::connect(TesttoCheck,SIGNAL(timeout()),this,SLOT(TestFailSlot()));//测试过程检查
        TesttoCheck->start(200);
    }
    else
    {
        QObject::connect(EndWin,SIGNAL(timeout()),this,SLOT(Close_WndFailSlot()));//启动退出窗体
        EndWin->start(100);
    }
}
 
 
ETH_TEST::~ETH_TEST()
{
    delete ui;
}
 
 
void ETH_TEST::sleepslot(unsigned int msec)//延时
{
    QTime dieTime=QTime::currentTime().addMSecs(msec);
    while(QTime::currentTime()<dieTime)
        QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
 
 
void ETH_TEST::InitialDelFile()//初始化删除MARK
{
    QFile file1("pass.txt");
    QFile file2("file.txt");
    if(file1.exists())file1.remove();
    if(file2.exists()) file2.remove();
}
 
 
void ETH_TEST::ProcessKill()//关闭进程
{
    QString cmd="taskkill /im "+QString(this->ConfiArgc[7])+" /f";
    //QMessageBox::information(this,"",cmd);
    QProcess::execute(cmd);
}
 
 
void ETH_TEST::SaveTestData()//保存测试数据
{
    QFile file(QDateTime::currentDateTime().toString("yyyyMMddhhmmsszzzz")+".txt");//设置名称
    file.open(QIODevice::WriteOnly|QIODevice::NewOnly|QIODevice::Text);
    QTextStream stream(&file);//定义文件写入流
    foreach (QString calc, this->Calcalate_rate_Value)
    {
        stream<<calc<<endl;
    }
    foreach (QString Temp, this->Temperature_Value)
    {
        stream<<Temp<<endl;
    }
    file.close();
}
 
 
void ETH_TEST::TestFailSlot()//侦测FAIL处理机制
{
    if(this->IsAllStatePas==false)
    {
        this->RunWin->stop();
        this->EndWin->stop();
        QFile file("fail.txt");
        file.open(QIODevice::WriteOnly|QIODevice::NewOnly);
        file.close();
        this->SaveTestData();//存储测试数据
        QThread::sleep(QString(ConfiArgc[6]).toInt());//延时退出
        if(process)//关闭进程
        {
            process->close();
            //delete process;
            //process=0;
        }
        this->ProcessKill();//结束进程
        qApp->exit(1);
        //this->close();
    }
}
 
 
void ETH_TEST::Close_WndPassSlot()//关闭窗体PASS
{
    if((this->secondnumber)<=0)
    {
        QFile file("pass.txt");
        file.open(QIODevice::WriteOnly|QIODevice::NewOnly);
        file.close();
        this->SaveTestData();//存储测试数据
        QThread::sleep(QString(ConfiArgc[6]).toInt());//延进退出
        //this->close();
        this->ProcessKill();//结束进程
        qApp->exit(1);
    }
}
void ETH_TEST::Close_WndFailSlot()//关闭窗体FAIL
{
    QMessageBox::information(this,"System Err","配置文件打开读取错误!!");
    QFile file("fail.txt");
    file.open(QIODevice::WriteOnly|QIODevice::NewOnly);
    file.close();
    if(process)//关闭进程
    {
        process->close();
        //delete process;
        //process=0;
    }
    this->SaveTestData();//存储测试数据
    QThread::sleep(QString(ConfiArgc[6]).toInt());//延进退出
    //this->close();
    this->ProcessKill();//结束进程
    qApp->exit(1);
}
 
 
bool ETH_TEST::ReadCfgInfo(QString FileName)//读取配置
{
    QStringList lines;
    //QString Path=QDir::currentPath()+"/"+FileName;//读取当前目录路径
    QString Path=FileName;
    QFile file(Path);//设置打开文件的路径
 
 
    if(!file.open(QIODevice::ReadOnly|QIODevice::Text))//文件打开方式 
        return false;
    QTextStream stream(&file);
    QString line;
    while(!(line=stream.readLine()).isNull())//判断读取的内容是否为空l
    {
        QStringList Temp=line.split("=",QString::SkipEmptyParts);//截取字符串
        this->ConfiArgc.append(Temp[1]);
     }
     file.close();
     return true;
}
 
 
void ETH_TEST::InitialTableSlot()//初始化表格
{
    ui->label_2->setText("");//设置label_2为空
    ui->cmdEdit->setReadOnly(true);//设置cmdEdit为只读编辑器
 
 
    ui->m_CounttableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);//禁至编辑表格
    ui->m_CounttableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);//设置表格为整行选中
    ui->m_CounttableWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);//允许多行选中
 
 
    //初始化界面
    QStringList HStrList;
    //HStrList.push_back(QString("NO."));
    HStrList.push_back(QString("GPU_0"));
    HStrList.push_back(QString("GPU_1"));
    HStrList.push_back(QString("GPU_2"));
    HStrList.push_back(QString("GPU_3"));
    HStrList.push_back(QString("GPU_4"));
    HStrList.push_back(QString("GPU_5"));
    HStrList.push_back(QString("GPU_6"));
    HStrList.push_back(QString("GPU_7"));
    HStrList.push_back(QString("GPU_8"));
    HStrList.push_back(QString("GPU_9"));
    HStrList.push_back(QString("GPU_10"));
    HStrList.push_back(QString("GPU_11"));
    HStrList.push_back(QString("GPU_12"));
    HStrList.push_back(QString("GPU_13"));
    HStrList.push_back(QString("GPU_14"));
    HStrList.push_back(QString("GPU_15"));
    HStrList.push_back(QString("Average_Value"));
    HStrList.push_back(QString("Total_Values"));
 
 
    //设置行列数(只有列存在的前提下,才可以设置列标签)
    int HlableCnt=HStrList.count();
    ui->m_CounttableWidget->setRowCount(3);//设置3行
    ui->m_CounttableWidget->setColumnCount(HlableCnt);//设置读取的HStrList关键字列数
 
 
    //设置列标签
    ui->m_CounttableWidget->setHorizontalHeaderLabels(HStrList);
 
 
    //设置行标签
    QStringList rowLabls;
    rowLabls.push_back(QString("算率.Mh/s"));
    rowLabls.push_back(QString("温度.C"));
    rowLabls.push_back(QString("测试结果"));
    ui->m_CounttableWidget->setVerticalHeaderLabels(rowLabls);
 
 
    //设置每一列的宽度
    for(int l=0;l<HStrList.count()-2;l++)
        ui->m_CounttableWidget->setColumnWidth(l,55);
    ui->m_CounttableWidget->setColumnWidth(HStrList.count()-2,102);
    ui->m_CounttableWidget->setColumnWidth(HStrList.count()-1,102);
 
 
 
 
    //设置每一行的高度
    for(int r=0;r<ui->m_CounttableWidget->rowCount();r++)
        ui->m_CounttableWidget->setRowHeight(r,55);
    ui->m_CounttableWidget->horizontalHeader()->setFixedHeight(80);//设置表头高度
    //ui->m_CounttableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条
    //ui->m_CounttableWidget->item(0,0)->setTextAlignment(Qt::AlignHCenter);//单元格字体对齐
    //ui->m_CounttableWidget->item(1,0)->setBackground(QColor(0,60,10));//设置字体背景颜色
    //ui->m_CounttableWidget->item(1,0)->setTextColor(QColor(200,111,100));//设置字体颜色
    //ui->m_CounttableWidget->item(1,0)->setFont(QFont("Helvetica"));//设置字体
    ui->m_CounttableWidget->setShowGrid(true);//显示表格线
 
 
    //设置表头不可点击
    ui->m_CounttableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(134, 245, 99, 255),stop:0.5 rgba(134, 148, 99, 255),stop:1 rgba(115, 87, 128, 255));color:rgb(25, 70, 100);padding-left: 1px;border: 1px solid #FFFF00;}"); //设置表头背景色
    ui->m_CounttableWidget->setAlternatingRowColors(true);
}
 
 
void ETH_TEST::timernumber()//定时执行
{
    if((this->secondnumber)>1)
    {
        this->EveryprogressValues=100/QString(this->ConfiArgc[0]).toDouble();
        QString Temp=QString::number(this->secondnumber);
        ui->label_2->setText(Temp+"秒");
        ui->progressBar->setValue((this->SetprogressTotalValues)-(this->progressTotalValues));//当前进度条值
        this->progressTotalValues+=this->EveryprogressValues;//进度条总增长值
        this->secondnumber--;//执行秒数倒计时
    }
    else
    {
        ui->progressBar->setValue(0);
        ui->label_2->setText("定时测试完成!!");
        if(process)//关闭进程
        {
            process->close();
            //delete process;
            //process=0;
        }
        this->secondnumber=0;
        this->IsNotTime=true;
        m_timer->stop();
    }
}
 
 
void ETH_TEST::StartQProgressBarSlot(int runtimer)//设置及执行进度条
{
    this->secondnumber=runtimer;
    QFont ft;
    ft.setPointSize(11);
    ui->progressBar->setFont(ft);//设置进度条字体大小
    ui->label_2->setFont(ft);//设置计时器字体大小
    ui->progressBar->setMinimum(0);//进度条最小值
    ui->progressBar->setMaximum(100);//进度条最大值
    ui->progressBar->setValue(100);//当前进度条
    ui->progressBar->setOrientation(Qt::Horizontal);//水平方向
    //ui->progressBar->setInvertedAppearance(true);//反方向
    //this->EveryprogressValues=1;//绑定进度条执行尺度
    this->SetprogressTotalValues=100;//进度条最大值
    ui->progressBar->setStyleSheet("QProgressBar::chunk{background-color:rgb(153,188,0)}");//设置进度条颜色
    QObject::connect(m_timer,SIGNAL(timeout()),this,SLOT(timernumber()));//启动计时
    m_timer->start(1000);
}
 
 
void ETH_TEST::closeEvent(QCloseEvent *event)
{
    process->kill();
    if(!process->waitForFinished(100))
        return;
    event->accept();
}
 
 
void ETH_TEST::finish_process(int exitCode, QProcess::ExitStatus exitStatus)
{
    if(exitStatus==QProcess::NormalExit)
    {
        ui->cmdEdit->append("process exit normal");
    }
    else
    {
        ui->cmdEdit->append("process exit crash");
    }
    ui->cmdEdit->append("process finised");
}
 
 
void ETH_TEST::start_read_output()
{
    QByteArray ba=process->readAllStandardOutput();
    ui->cmdEdit->append(QString::fromLocal8Bit(ba));
}
 
 
void ETH_TEST::start_read_err_output()
{
    QByteArray ba=process->readAllStandardError();
    ui->cmdEdit->append(QString::fromLocal8Bit(ba));
}
 
 
void ETH_TEST::StartSupportForChinese()
{
    //启动QT对中文支持
    QTextCodec *codec=QTextCodec::codecForName("GB2312");
    QTextCodec::setCodecForLocale(codec);
    QObject::connect(process,SIGNAL(readyReadStandardOutput()),this,SLOT(start_read_output()));
    QObject::connect(process,SIGNAL(readyReadStandardError()),this,SLOT(start_read_err_output()));
    QObject::connect(process,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(finish_process(int,QProcess::ExitStatus)));
}
 
 
//调用脚本并并生成LOG FILE 到TEXTEDIT
bool ETH_TEST::CallAnExternalProgram(QString exe)
{
    process->start(exe);
    if(false==process->waitForStarted())
    {
        //ui->cmdEdit->append("Process call fail!");
        QMessageBox::information(this,"System Err","执行文件报错!!");
        QFile file("fail.txt");
        file.open(QIODevice::WriteOnly|QIODevice::NewOnly);
        file.close();
        return false;
    }
    else
    {
        //ui->cmdEdit->append("Process all successed!!");
        return true;
    }
 
 
}
 
 
//读取cmdEdit字符串分析处理存储于CalcalateRateValue及TemperatureValue储存于QStringList中
void ETH_TEST::ProcessSortStrSlot()
{
    QStringList list=ui->cmdEdit->toPlainText().split("\n");//以回车为截点按行存储
    QStringList CountreplaceStrSample;//数率截取替换的字符串组
    CountreplaceStrSample<<" Mh/s"<<"GPU0 "<<"GPU1 "<<"GPU2 "<<"GPU3 "<<"GPU4 "<<"GPU5 "<<"GPU6 "<<"GPU7 "<<"GPU8 "<<"GPU9 "<<"GPU10 "<<"GPU11 "<<"GPU12 "<<"GPU13 ";
    QStringList TempreplaceStrSample;//温度截取替换的字符串组
    TempreplaceStrSample<<"GPU0 t="<<"GPU1 t="<<"GPU2 t="<<"GPU3 t="<<"GPU4 t="<<"GPU5 t="<<"GPU6 t="<<"GPU7 t="<<"GPU8 t="<<"GPU9 t="<<"GPU10 t="<<"GPU11 t="<<"GPU12 t="<<"GPU13 t=";
    int n=0,t=0;
    foreach (QString Temp, list)
    {
        if(Temp.length()>30)//过滤字符串长度小于30的数据
        {
            QStringList CountStr=Temp.split("ETH: GPU0 ");//读取CMDEDITSHOW算率字符串
            if(CountStr.size()>=2)//判断是否符合取的数据且数据不是已读取过的数据
            {
                if(n>=this->Callen)
                {
                    QStringList StrInitProcess1=QString(CountStr[1]).split(", ");//以“, ”为分隔点分离字符串存储于字符串数组中
                    QString StrInitProcess2;
                    double totalvalue=0.0;
                    foreach (QString rpstr1, StrInitProcess1)//循环读取字符串数组
                    {
                        QString Tempe;
                        Tempe=rpstr1;
                        foreach (QString rpstr2, CountreplaceStrSample)//循环读取替换字符串标准值
                        {
                            if(Tempe.contains(rpstr2),Qt::CaseSensitive)//判断是否存在
                            {
                                Tempe.replace(QRegExp(rpstr2),"");//替换字符串中多余的字符串
                            }
                        }
                        totalvalue+=Tempe.toDouble();//将字符串转换为双精度并执行叠加运算
                        StrInitProcess2+=Tempe+",";//将字符串增加分号隔离
                    }
                    if((StrInitProcess1.size())<(QString(this->ConfiArgc[2]).toInt()))//如果测试卡数少读取的卡数执行设置0值
                    {
                        //for(int el=(StrInitProcess1.size()-1);el<=(QString(this->ConfiArgc[2]).toInt());el++)
                        for(int n=0;n<(QString(this->ConfiArgc[2]).toInt())-(StrInitProcess1.size());n++)
                        {
                            StrInitProcess2+="0,";//读取数据量不常符合标准时少于的量赋值0
                        }
                    }
                    StrInitProcess2+=QString::number(totalvalue/(QString(this->ConfiArgc[2]).toInt()))+",";//添加算率平均值
                    StrInitProcess2+=QString::number(totalvalue);//将数字转换为字符串并组合
 
 
 
 
                    this->FillTableData(StrInitProcess2,1);//将算率数据插入数格
 
 
                    this->Calcalate_rate_Value.append(StrInitProcess2);//将数据存储
                    this->Callen++;
                }
                n++;
            }
            QStringList TemperStr=Temp.split("GPU0 t=");//读取温度字符串
            if(TemperStr.size()>=2)//读取CMDEDITSHOW温度字符串
            {
                if(t>=(QString(this->ConfiArgc[3]).toInt()-3))
                {
                    QStringList StrInitProcess1=QString(TemperStr[1]).split(", ");//以“, ”为分隔点分离字符串存储于字符串数组中
                    QString StrInitProcess2;
                    int totalTemplater=0;
                    foreach (QString rpstr1, StrInitProcess1)//循环读取字符串数组
                    {
                        //QStringList MoveStr=rpstr1.split(" ");
                        QString Tempe;
                        Tempe=rpstr1;
                        foreach (QString rpstr2, TempreplaceStrSample)//循环读取替换字符串标准值
                        {
                            if(Tempe.contains(rpstr2),Qt::CaseSensitive)//判断是否存在
                            {
                                Tempe.replace(QRegExp(rpstr2),"");//替换字符串中多余的字符串
                            }
                        }
                        QStringList MoveStr=Tempe.split("C ");//分隔"C "两端了符串
                        Tempe=MoveStr[0];
                        totalTemplater+=Tempe.toInt();//将字符串转换为整型并执行叠加运算
                        StrInitProcess2+=Tempe+",";//将字符串增加分号隔离
                    }
                    if((StrInitProcess1.size())<(QString(this->ConfiArgc[2]).toInt()))//如果测试卡数少读取的卡数执行设置0值
                    {
                        //for(int el=(StrInitProcess1.size()-1);el<=(QString(this->ConfiArgc[2]).toInt());el++)
                        for(int n=0;n<(QString(this->ConfiArgc[2]).toInt())-(StrInitProcess1.size());n++)
                        {
                            StrInitProcess2+="0,";//读取数据量不常符合标准时少于的量赋值0
                        }
                    }
                    StrInitProcess2+=QString::number(totalTemplater/(QString(this->ConfiArgc[2]).toInt()))+",";//添加温度平均值
                    StrInitProcess2+=QString::number(totalTemplater);//将数字转换为字符串并组合
                    FillTableData(StrInitProcess2,2);//将温控数据插入数格
                    this->Temperature_Value.append(StrInitProcess2);//将数据存储
                    this->Temlen++;
                }
                t++;
            }
        }
    }
}
 
 
//将数据填充到表格中
void ETH_TEST::FillTableData(QString str,int Item)
{
      QStringList MoveStrData=str.split(",");//将字符串数据以“,”分离形式存储
      int TableColumnCount=ui->m_CounttableWidget->columnCount();//获取表格列数
      if(Item==1)//表格第一列内容填入
      {
           for(int l=0;l<MoveStrData.size()-2;l++)
            {
                double value1=QString(MoveStrData[l]).toDouble();
                double value2=QString(this->ConfiArgc[4]).toDouble();
 
 
                //插入数据
                ui->m_CounttableWidget->setItem(0,l,new QTableWidgetItem(MoveStrData[l]));
                if(value1>=value2)
                {
                    ui->m_CounttableWidget->item(0, l)->setForeground(QBrush(QColor(0, 85, 0)));//设置绿色字体
                    ui->m_CounttableWidget->setItem(2,l,new QTableWidgetItem("PASS"));
                    ui->m_CounttableWidget->item(2, l)->setForeground(QBrush(QColor(0, 85, 0)));//设置绿色字体
                }
                else
                {
                    ui->m_CounttableWidget->item(0, l)->setForeground(QBrush(QColor(255, 0, 0)));//设置红色字体
                    ui->m_CounttableWidget->setItem(2,l,new QTableWidgetItem("FAIL"));
                    ui->m_CounttableWidget->item(2, l)->setForeground(QBrush(QColor(255, 0, 0)));//设置红色字体
                    this->IsAllStatePas=false;
                }
            }
 
 
            //平均算率
            //插入数据
            ui->m_CounttableWidget->setItem(0,TableColumnCount-2,new QTableWidgetItem(MoveStrData[MoveStrData.size()-2]+"Ms/h"));
            if((QString(MoveStrData[MoveStrData.size()-2]).toDouble())>=(QString(this->ConfiArgc[4]).toDouble()))
            {
                ui->m_CounttableWidget->item(0,TableColumnCount-2)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-2,new QTableWidgetItem("PASS"));
                ui->m_CounttableWidget->item(2,TableColumnCount-2)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
            }
            else
            {
                ui->m_CounttableWidget->item(0,TableColumnCount-2)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-2,new QTableWidgetItem("FAIL"));
                ui->m_CounttableWidget->item(2,TableColumnCount-2)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                this->IsAllStatePas=false;
            }
 
 
            //总算率
            //插入数据
            ui->m_CounttableWidget->setItem(0,TableColumnCount-1,new QTableWidgetItem(MoveStrData[MoveStrData.size()-1]+"Ms/h"));
            if((QString(MoveStrData[MoveStrData.size()-1]).toDouble())>=(QString(this->ConfiArgc[4]).toInt()*QString(this->ConfiArgc[2]).toInt()))
            {
                ui->m_CounttableWidget->item(0,TableColumnCount-1)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-1,new QTableWidgetItem("PASS"));
                ui->m_CounttableWidget->item(2,TableColumnCount-1)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
            }
            else
            {
                ui->m_CounttableWidget->item(0,TableColumnCount-1)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-1,new QTableWidgetItem("FAIL"));
                ui->m_CounttableWidget->item(2,TableColumnCount-1)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                this->IsAllStatePas=false;
            }
      }
      else if(Item==2)//表格第二列内容填入
      {
            for(int l=0;l<MoveStrData.size()-2;l++)
            {
                double value1=QString(MoveStrData[l]).toDouble();
                double value2=QString(this->ConfiArgc[5]).toDouble();
                //插入数据
                ui->m_CounttableWidget->setItem(1,l,new QTableWidgetItem(MoveStrData[l]));
                if(value1<=value2&&value1>0)
                {
                   ui->m_CounttableWidget->item(1,l)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                   ui->m_CounttableWidget->setItem(2,l,new QTableWidgetItem("PASS"));
                   ui->m_CounttableWidget->item(2,l)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                }
                else
                {
                    ui->m_CounttableWidget->item(1,l)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                    ui->m_CounttableWidget->setItem(2,l,new QTableWidgetItem("FAIL"));
                    ui->m_CounttableWidget->item(2,l)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                    this->IsAllStatePas=false;
                }
            }
 
 
            //平均算率
            //插入数据
            ui->m_CounttableWidget->setItem(1,TableColumnCount-2,new QTableWidgetItem(MoveStrData[MoveStrData.size()-2]+"C"));
            if((QString(MoveStrData[MoveStrData.size()-2]).toInt())<=(QString(this->ConfiArgc[5]).toInt()))
            {
                ui->m_CounttableWidget->item(1,TableColumnCount-2)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-2,new QTableWidgetItem("PASS"));
                ui->m_CounttableWidget->item(2,TableColumnCount-2)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
            }
            else
            {
                ui->m_CounttableWidget->item(1,TableColumnCount-2)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-2,new QTableWidgetItem("FAIL"));
                ui->m_CounttableWidget->item(2,TableColumnCount-2)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                this->IsAllStatePas=false;
            }
 
 
            //总算率
            //插入数据
            ui->m_CounttableWidget->setItem(1,TableColumnCount-1,new QTableWidgetItem(MoveStrData[MoveStrData.size()-1]+"C"));
            if((QString(MoveStrData[MoveStrData.size()-1]).toDouble())<=(QString(this->ConfiArgc[5]).toInt()*QString(this->ConfiArgc[2]).toInt()))
            {
                ui->m_CounttableWidget->item(1,TableColumnCount-1)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-1,new QTableWidgetItem("PASS"));
                ui->m_CounttableWidget->item(2,TableColumnCount-1)->setForeground(QBrush(QColor(0,85,0)));//设置绿色字体
            }
            else
            {
                ui->m_CounttableWidget->item(1,TableColumnCount-1)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                ui->m_CounttableWidget->setItem(2,TableColumnCount-1,new QTableWidgetItem("FAIL"));
                ui->m_CounttableWidget->item(2,TableColumnCount-1)->setForeground(QBrush(QColor(255,0,0)));//设置红色字体
                this->IsAllStatePas=false;
            }
      }
}
 
 

MAIN.CPP SOURCE CODE:

#include "eth_test.h"
#include <QApplication>
#include <QDir>
#include <QIcon>
 
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ETH_TEST w;
    w.setMaximumSize(1196,870);
    w.setMinimumSize(1196,870);
    w.show();
 
 
    return a.exec();
}
 
 



猜你喜欢

转载自blog.csdn.net/u013934107/article/details/81001296
ETH