```#include "alone_design.h"
#include "ui_alone_design.h"
alone_design::alone_design(QWidget *parent) :
QWidget(parent),
ui(new Ui::alone_design)
{
ui->setupUi(this);
ui->label_2->setEnabled(false);
ui->lineEdit_2->setEnabled(false);
QIntValidator *IntVal = new QIntValidator;
IntVal->setRange(1,10);
ui->lineEdit->setValidator(IntVal);
ui->lineEdit_2->setValidator(IntVal);
ui->lineEdit->setToolTip(QString::fromLocal8Bit("只能输入整型数据"));
ui->lineEdit_2->setToolTip(QString::fromLocal8Bit("只能输入整型数据"));
get_software_path();
}
alone_design::~alone_design()
{
delete ui;
}
void alone_design::on_pushButton_clicked()
{
read_txt(software_path+"result.txt");
return;
ui->tableWidget->setRowCount(0);
ui->tableWidget->horizontalHeader()->setVisible(false);
ui->tableWidget_2->setRowCount(0);
ui->tableWidget_2->horizontalHeader()->setVisible(false);
ui->lineEdit->clear();
ui->lineEdit_2->clear();
}
void alone_design::on_pushButton_2_clicked()
{
get_data_write_txt();
}
void alone_design::on_lineEdit_editingFinished()
{
//获取表头以及列数
if(ui->lineEdit->text().isEmpty() || ui->lineEdit->text().isNull())
{
return;
}
int col = ui->lineEdit->text().toInt();
ui->tableWidget->setColumnCount(col+2);
QStringList tempList;
tempList<<QString::fromLocal8Bit("内容提示");
for(int i=1;i<col+1;i++)
{
tempList<<QString::fromLocal8Bit("自变量系数")+QString::number(i);
}
tempList<<QString::fromLocal8Bit("常数项");
ui->tableWidget->setHorizontalHeaderLabels(tempList);
ui->label_2->setEnabled(true);
ui->lineEdit_2->setEnabled(true);
}
void alone_design::on_lineEdit_2_editingFinished()
{
if(ui->lineEdit_2->text().isEmpty() || ui->lineEdit_2->text().isNull())
{
return;
}
int row = ui->lineEdit_2->text().toInt();
ui->tableWidget->setRowCount(row+1);
ui->tableWidget->setItem(0,0,new QTableWidgetItem(QString::fromLocal8Bit("目标函数")));
QComboBox *cbox = new QComboBox;
QStringList teplist;
teplist<<"min"<<"max";
cbox->addItems(teplist);
ui->tableWidget->setCellWidget(0,ui->tableWidget->columnCount()-1,cbox);
for(int i=1;i<row+1;i++)
{
ui->tableWidget->setItem(i,0,new QTableWidgetItem(QString::fromLocal8Bit("约束方程")+QString::number(i)));
}
for(int i=0;i<ui->tableWidget->rowCount();i++)
{
QTableWidgetItem *item = ui->tableWidget->item(i,0);
item->setFlags(item->flags()&~Qt::ItemIsEditable);
}
}
void alone_design::get_data_write_txt()
{
if(ui->lineEdit_2->text().isEmpty() || ui->lineEdit_2->text().isNull() ||ui->lineEdit->text().isEmpty() || ui->lineEdit->text().isNull())
{
QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("请先填写自变量个数或者约束方程个数"));
return;
}
for(int i=0;i<ui->tableWidget->rowCount();i++)
{
for(int k=0;k<ui->tableWidget->columnCount();k++)
{
if(i!=0 && k!=ui->tableWidget->rowCount()-1)
{
if(ui->tableWidget->item(i,k) == 0)
{
QMessageBox::warning(NULL, QStringLiteral("提示"), QString::fromLocal8Bit("请先完善表格在执行操作"));
return;
}
}
}
}
QStringList list;
list<<ui->lineEdit->text()<<"\n";
list<<ui->lineEdit_2->text()<<"\n";
qDebug()<<"a";
for(int i=0;i<ui->tableWidget->rowCount();i++)
{
QString str;
for(int k=1;k<ui->tableWidget->columnCount()-1;k++)
{
str = str + ui->tableWidget->item(i,k)->text()+" ";
}
str=str+"\n";
list<< str;
}
qDebug()<<"b";
QString temstr;
for(int j=1;j<ui->tableWidget->rowCount();j++)
{
temstr = temstr + ui->tableWidget->item(j,ui->tableWidget->columnCount()-1)->text()+" ";
}
qDebug()<<"c";
temstr = temstr+"\n";
list<<temstr;
qDebug()<<list;
write_txt(software_path+"data.txt",list);
run_cmd();
read_txt(software_path+"result.txt");
}
void alone_design::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 alone_design::get_software_path()
{
QDir dir(qApp->applicationDirPath());
dir.cdUp();
// dir.cdUp();
software_path = dir.absolutePath() + QString("/alone_design/");
qDebug()<<software_path;
}
void alone_design::run_cmd()
{
QProcess program;
QString cmd_str = software_path+"alone_1.exe";
program.start(cmd_str);
program.waitForFinished();
}
void alone_design::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_data_update(txt_list);
}
void alone_design::table_data_update(QStringList listv)
{
QList<int>list;
for(int i =1;i<ui->tableWidget->columnCount()-1;i++)
{
if(ui->tableWidget->item(0,i)->text() != "0")
{
list<<i;
}
}
qDebug()<<list;
ui->tableWidget_2->setColumnCount(list.size()+1);
ui->tableWidget_2->setRowCount(1);
QStringList list1;
for(int k=list.size()-1;k>-1;k--)
{
list1<<QString::fromLocal8Bit("自变量")+QString::number(list.at(k));
}
list1<<QString::fromLocal8Bit("最优解");
ui->tableWidget_2->setHorizontalHeaderLabels(list1);
for(int num=0;num<ui->tableWidget_2->columnCount()-1;num++)
{
ui->tableWidget_2->setItem(0,num,new QTableWidgetItem(listv.at(num)));
}
ui->tableWidget_2->setItem(0,ui->tableWidget_2->columnCount()-1,new QTableWidgetItem(listv.at(ui->tableWidget_2->columnCount()-1)));
QComboBox *Box =dynamic_cast <QComboBox*>(ui->tableWidget->cellWidget(0,ui->tableWidget->columnCount()-1));
if(Box->currentText() == "min")
{
for(int num=0;num<ui->tableWidget_2->columnCount();num++)
{
QString t_Str = ui->tableWidget_2->item(0,num)->text();
ui->tableWidget_2->item(0,num)->setText(QString("-")+t_Str);
}
}
}
试验设计-单纯形优化法1
最新推荐文章于 2024-04-30 16:48:07 发布