qt实现正交算法源码

在这里插入代码片

#include “orthogonalwidget.h”
#include “ui_orthogonalwidget.h”

OrthogonalWidget::OrthogonalWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::OrthogonalWidget)
{
ui->setupUi(this);
get_software_path();
init_data();

}

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

void OrthogonalWidget::init_data()
{
map_orthogonal_table();
ui->radioButton->setChecked(true);
ui->radioButton_2->setChecked(false);
ui->stackedWidget_2->setCurrentIndex(0);
get_combox_data();
}

void OrthogonalWidget::map_orthogonal_table()
{
map_ort.clear();
map_str.clear();
map_ort.insert(“L4(2^3)”,1);
map_ort.insert(“L8(2^7)”,2);
map_ort.insert(“L9(3^4)”,3);
map_ort.insert(“L12(2^11)”,4);
map_ort.insert(“L16(2^15)”,5);
map_ort.insert(“L9(4^5)”,6);
map_ort.insert(“L9(5^6)”,7);
map_str.insert(“L4(2^3)”,“2,3”);
map_str.insert(“L8(2^7)”,“2,7”);
map_str.insert(“L9(3^4)”,“3,4”);
map_str.insert(“L12(2^11)”,“2,11”);
map_str.insert(“L16(2^15)”,“2,15”);
map_str.insert(“L9(4^5)”,“4,5”);
map_str.insert(“L9(5^6)”,“5,6”);
// map_ort.insert(“L8(4x2^4)”,8);
// map_ort.insert(“L8(3x2^4)”,9);
// map_ort.insert(“L8(44x23)”,10);
}

void OrthogonalWidget::on_radioButton_2_clicked()
{
ui->radioButton->setChecked(false);
ui->stackedWidget_2->setCurrentIndex(1);
ui->tableWidget_13->setRowCount(0);
}

void OrthogonalWidget::on_radioButton_clicked()
{
ui->tableWidget_13->setRowCount(0);
ui->radioButton_2->setChecked(false);

ui->stackedWidget_2->setCurrentIndex(0);

}

void OrthogonalWidget::get_combox_data()
{
QString str = ui->comboBox->currentText();
QString clo_row_str = map_str.value(str.toLocal8Bit());
QStringList list = clo_row_str.split(“,”);
qDebug()<<str<<clo_row_str<<list;
ui->tableWidget_11->setRowCount(0);
QString tempstr = list.at(0);
ui->tableWidget_11->setRowCount(tempstr.toInt() + 1);
tempstr = list.at(1);
ui->tableWidget_11->setColumnCount(tempstr.toInt());
}

void OrthogonalWidget::on_comboBox_activated(const QString &arg1)
{
ui->tableWidget_13->setRowCount(0);
get_combox_data();
}

void OrthogonalWidget::on_pushButton_clicked()
{
for(int i=0;itableWidget_11->rowCount();i++)
{
for(int j=0;jtableWidget_11->columnCount();j++)
{
if(ui->tableWidget_11->item(i,j)->text().isNull())
{
QMessageBox::warning(NULL, QStringLiteral(“提示”), QString::fromLocal8Bit(“请将因素水平表填好在执行操作”));
return;
}
}
}
int param_value = map_ort.value(ui->comboBox->currentText().toLocal8Bit());
if(param_value == 1)
{
table_widget = ui->tableWidget;
}
else if(param_value == 2)
{
table_widget = ui->tableWidget_2;
}
else if(param_value == 3)
{
table_widget = ui->tableWidget_3;
}
else if(param_value == 4)
{
table_widget = ui->tableWidget_4;
}
else if(param_value == 5)
{
table_widget = ui->tableWidget_10;
}
else if(param_value == 6)
{
table_widget = ui->tableWidget_5;
}
else if(param_value == 7)
{
table_widget = ui->tableWidget_6;
}
qDebug()<<“t_name”<<table_widget;
create_ort_table(table_widget);
}
void OrthogonalWidget::create_ort_table(QTableWidget *tableWidget)
{
//复制表格内容
QStringList tep_list;
tep_list.clear();
for(int k=0;ktableWidget_11->columnCount();k++)
{
tep_list<tableWidget_11->item(0,k)->text();
}
ui->tableWidget_13->setRowCount(0);
ui->tableWidget_13->setRowCount(tableWidget->rowCount());
ui->tableWidget_13->setColumnCount(tableWidget->columnCount());
//添加表头数据
ui->tableWidget_13->setHorizontalHeaderLabels(tep_list);
ui->tableWidget_13->horizontalHeader()->setVisible(true);
for(int i=0;irowCount();i++)
{
for(int j=0;jcolumnCount();j++)
{
ui->tableWidget_13->setItem(i,j,new QTableWidgetItem(tableWidget->item(i,j)->text()));
}
}
//映射水平因素表对应数据
for(int count=0;counttableWidget_11->columnCount();count++)
{
QMap<QString,QString>map_data;
map_data.clear();
for(int num=1;numtableWidget_11->rowCount();num++)
{
map_data.insert(QString::number(num),ui->tableWidget_11->item(num,count)->text());
}
for(int k=0;ktableWidget_13->rowCount();k++)
{
ui->tableWidget_13->item(k,count)->setText(map_data.value(ui->tableWidget_13->item(k,count)->text()));
}
}
}

void OrthogonalWidget::on_pushButton_3_clicked()
{
for(int i=0;itableWidget_11->rowCount();i++)
{
for(int j=0;jtableWidget_11->columnCount();j++)
{
qDebug()<<“text”<tableWidget_11->item(i,j);
if(ui->tableWidget_11->item(i,j)==0)
{

        }
        else
        {
          ui->tableWidget_11->item(i,j)->setText("");
        }

    }
}
ui->tableWidget_13->setRowCount(0);
ui->tableWidget_13->horizontalHeader()->setVisible(false);

}

void OrthogonalWidget::on_pushButton_4_clicked()
{
ui->tableWidget_12->setRowCount(0);
ui->tableWidget_12->setRowCount(100);
ui->tableWidget_12->setColumnCount(100);
ui->tableWidget_13->setRowCount(0);
}

void OrthogonalWidget::on_pushButton_2_clicked()
{
//获取表格中的内容加入制表位写入到txt中
get_tabletable();

if(tale_data_list.size()>0)
{
    qDebug()<<tale_data_list.size()<<tale_data_list;
    write_txt(software_path+"test.txt",tale_data_list);
}
//执行cmd指令生成正交数据
cmd_command();
//Msleep(1000);
read_txt(software_path + "test2.txt");
table_update(txt_list);

}
void OrthogonalWidget::write_txt(QString path, QStringList list)
{
QFile file(path);
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
{
return;
}
QTextStream stream(&file);
for(int i=0;i<list.size();i++)
{
QString temp_str = list.at(i);
if(i == list.size()-1)
{
temp_str.remove(temp_str.size()-1,1);
}
stream<<temp_str;
}
file.close();
}

void OrthogonalWidget::get_software_path()
{
QDir dir(qApp->applicationDirPath());
dir.cdUp();
// dir.cdUp();
software_path = dir.absolutePath() + QString(“/AuxilliarySoftware/allpairs/”);
qDebug()<<software_path;
}

void OrthogonalWidget::get_tabletable()
{
//遍历表格取出选值范围
QList<QTableWidgetItem*>item_list;
item_list.clear();
int num_flag = 0;
int max_row,max_col;
for(int i=0;itableWidget_12->rowCount();i++)
{
for(int j=0;jtableWidget_12->columnCount();j++)
{
if(ui->tableWidget_12->item(i,j) != 0)
{
num_flag ++;
if(num_flag == 1)
{
max_row = i;
max_col = j;
}
else if(num_flag>1)
{
if(i>max_row)
{
max_row = i;
}
if(j>max_col)
{
max_col = j;
}
}
// item_list<tableWidget_12->item(i,j);
}
}
}
qDebug()<<max_row<<max_col;

tale_data_list.clear();
for(int i=0;i<max_row+1;i++)
{
    QString tStr = "";
    for(int j=0;j<max_col+1;j++)
    {
        if(ui->tableWidget_12->item(i,j) != 0)
        {
               tStr = tStr + ui->tableWidget_12->item(i,j)->text() + "\t";
        }
        else
        {
            tStr = tStr + "" + "\t";
        }
    }
    if(tStr !="")
    {
       tStr.remove(tStr.size()-1,1);
       tale_data_list<<tStr + "\n";
    }

}
qDebug()<<tale_data_list;
if(tale_data_list.size()<1)
{
    QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("请填表"));
    return;
}

}

void OrthogonalWidget::read_txt(QString path)
{
QFile file(path);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return;
}
txt_list.clear();
while(!file.atEnd())
{
QByteArray line = file.readLine();
QString str(line);
txt_list<<str;
}
qDebug()<<txt_list;
// if(txt_list.size()<1)
// {
// QMessageBox::warning(NULL, QStringLiteral(“提示”), QString::fromLocal8Bit(“填表格式有误!”));
// return;
// }
table_update(txt_list);
}

void OrthogonalWidget::table_update(QStringList list)
{
ui->tableWidget_13->setRowCount(0);
QStringList listtmp;
listtmp.clear();
for(int i=0;itableWidget_12->columnCount();i++)
{
if(ui->tableWidget_12->item(0,i) != 0)
{
listtmp<tableWidget_12->item(0,i)->text();
}
}
ui->tableWidget_13->setColumnCount(listtmp.size());
ui->tableWidget_13->setHorizontalHeaderLabels(listtmp);
ui->tableWidget_13->horizontalHeader()->setVisible(true);
for(int num = 3;num<list.size();num++)
{
if(list.at(num) == “\n”)
{
qDebug()<<num;
break;
}

    ui->tableWidget_13->insertRow(ui->tableWidget_13->rowCount());
    QString str = list.at(num);
    QStringList tlist = str.split("\t");
    for(int k=1;k<tlist.size()-1;k++)
    {
     ui->tableWidget_13->setItem(ui->tableWidget_13->rowCount()-1,k-1,new QTableWidgetItem(tlist.at(k)));
    }
}

}

void OrthogonalWidget::cmd_command()
{
// QProcess *cmdProcess;
// cmdProcess = new QProcess(this);
// QString str= software_path + “allpairs.exe " + software_path + “test.txt>” + software_path + “test2.txt”;
// str.replace(”/“,”");
// qDebug()<<str;
// QString ss = “D:/project/project1/build-DesignMethodForCombatSimulation-Desktop_Qt_5_9_5_MSVC2015_64bit-Release/AuxilliarySoftware/allpairs/allpairs.exe”;
// cmdProcess->start(“cmd”,QStringList()<<str);
// cmdProcess->waitForStarted();
// cmdProcess->waitForFinished();
// QProcess p(0);
// // p.setWorkingDirectory(software_path);
// p.start(“cmd”,QStringList()<<“E:/software/ucbug.com-PicPick/PicPick Pro 5.1.5/picpick.exe”);
// p.waitForStarted();

//      qDebug() <<  QString::fromLocal8Bit(p.readAllStandardOutput());
qDebug()<<"11111";
QProcess myProcess(this);
QString work_path = software_path;
// "D:/project/project1/build-DesignMethodForCombatSimulation-Desktop_Qt_5_9_5_MSVC2015_64bit-Release/AuxilliarySoftware/allpairs"
myProcess.setWorkingDirectory(work_path);
QString program = "C:/Windows/System32/cmd.exe";
QStringList arguments;
arguments<<"/c"<<"allpairs.exe test.txt>test2.txt";
myProcess.start(program,arguments);
while(myProcess.waitForFinished(100) == false)
{
    QByteArray qByteRead = myProcess.readAllStandardOutput();
    if(!qByteRead.isEmpty())
    {
        qDebug()<<QString::fromLocal8Bit(qByteRead);
        repaint();
    }
}

qDebug()<<"2222"<<QString::fromLocal8Bit(myProcess.readAllStandardOutput());

}

void OrthogonalWidget::Msleep(int msec)
{
QTime dieTime = QTime::currentTime().addMSecs(msec);
while(QTime::currentTime() < dieTime)
{
QCoreApplication::processEvents(QEventLoop::AllEvents,100);
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值