You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWATI/Src/nmNum/nmSubWxs/nmWxRCDialog.cpp

142 lines
4.8 KiB
C++

#include "nmWxRCDialog.h"
#include <QVBoxLayout>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QPushButton>
#include <QDebug>
#include <QTabWidget>
#include "ZxBaseUtil.h"
#include "nmWxRCWell.h"
nmWxRCDialog::nmWxRCDialog()
{
this->initUI();
this->resize(800, 720);
}
void nmWxRCDialog::on_save()
{
// 检查第1列是否都写了值如何不全则不能提交
QStringList valueList;
qDebug() << "=================";
for (int row = 0; row < m_pTableWidget->rowCount(); ++row) {
QTableWidgetItem* item = m_pTableWidget->item(row, 0);
QString value = item->text();
if (value.trimmed().length() == 0) {
// TODO数据是空的进行提示
return;
}
valueList.append(value);
}
// 渲染
QString sDir = ZxBaseUtil::getDirOf(s_Dir_Temp, "Nm/Solver");
QString sFile = sDir + "par.txt";
QFile file(sFile);
//检查
if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning("Cannot open file for writing: %s", qPrintable(file.errorString()));
return;
}
QTextStream out(&file);
for (int i = 0; i < valueList.size(); i++) {
out << valueList[i] << "\n";
}
file.close();
this->accept();
}
void nmWxRCDialog::initUI()
{
QVBoxLayout* mainLayout = new QVBoxLayout;
this->setLayout(mainLayout);
QTabWidget* tabWidget = new QTabWidget;
mainLayout->addWidget(tabWidget);
// 油藏属性设置
tabWidget->addTab(this->initOilReservoirUI(), tr("OilReservoir"));
tabWidget->addTab(this->initWellsUI(), tr("Wells"));
// 井属性设置
// 下方的操作按钮
// 底部按钮
QHBoxLayout* hLayout = new QHBoxLayout;
QPushButton* saveBT = new QPushButton("Save");
QPushButton* cancelBT = new QPushButton("Cancel");
connect(saveBT, SIGNAL(clicked()), this, SLOT(on_save()));
connect(cancelBT, SIGNAL(clicked()), this, SLOT(reject()));
hLayout->addStretch();
hLayout->addWidget(saveBT);
hLayout->addWidget(cancelBT);
mainLayout->addLayout(hLayout);
}
QWidget* nmWxRCDialog::initOilReservoirUI()
{
QVBoxLayout* mainLayout = new QVBoxLayout;
m_pTableWidget = new QTableWidget;
// 设置为3列
// 第一列是 名称,也是垂直的表头
// 第二列是 值
// 第三列是 单位
// 设置表头
m_pTableWidget->setColumnCount(2); // 设置列数为2
m_pTableWidget->setRowCount(7); // 设置行数为7
QStringList horizontalHeaders;
horizontalHeaders << tr("value") << tr("unit");
m_pTableWidget->setHorizontalHeaderLabels(horizontalHeaders);
m_pTableWidget->horizontalHeader()->setVisible(true);
QStringList headers;
headers << tr("Initial formation pressure") << tr("permeability") << tr("Reservoir thickness") << tr("Fluid viscosity") << tr("Volume coefficient") << tr("porosity") << tr("Overall compressibility"); // 定义表头内容
m_pTableWidget->setVerticalHeaderLabels(headers); // 设置表头标签
// 获取垂直表头的 QHeaderView 并设置宽度
QHeaderView *verticalHeader = m_pTableWidget->verticalHeader();
verticalHeader->setVisible(true);
verticalHeader->setFixedWidth(160);
m_pTableWidget->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
// 单位列表
QStringList unitList;
unitList << "Pa" << "mD" << "m" << "mPa.s" << "-" << "-" << "1/Mpa";
// 各个参数初始值
QVector<double> valueList;
valueList.push_back(30);
valueList.push_back(100);
valueList.push_back(5);
valueList.push_back(1);
valueList.push_back(1.1);
valueList.push_back(0.1);
valueList.push_back(0.0035);
valueList.push_back(1);
// 填充数据
for (int row = 0; row < m_pTableWidget->rowCount(); ++row) {
for (int column = 0; column < m_pTableWidget->columnCount(); ++column) {
QString content = QString("Row %1, Column %2").arg(row + 1).arg(column + 1);
if (column == 1) {
content = unitList[row];
} else {
content = QString::number(valueList[row]);
}
QTableWidgetItem *item = new QTableWidgetItem(content);
if (column == 1) {
item->setFlags(item->flags() & ~Qt::ItemIsEditable);
}
// 内容居中
item->setTextAlignment(Qt::AlignCenter | Qt::AlignVCenter);
m_pTableWidget->setItem(row, column, item);
}
}
return m_pTableWidget;
}
QWidget* nmWxRCDialog::initWellsUI()
{
QVector<QString> wellNames;
wellNames.append("well1");
wellNames.append("well2");
QVector<double> wellRadius;
wellRadius.append(0.05);
wellRadius.append(0.03);
nmWxRCWell* widget = new nmWxRCWell(wellNames, wellRadius, NULL);
return widget;
}