From 021d3e3f82cb7352082f470be0b43bbcead0c758 Mon Sep 17 00:00:00 2001 From: zhaolei <353719554@qq.com> Date: Thu, 11 Jun 2026 11:57:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9B=B2=E7=BA=BF=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E3=80=90=E6=9B=B2=E7=BA=BF=E8=AE=A1?= =?UTF-8?q?=E7=AE=97=E3=80=91=E5=92=8C=E6=9B=B2=E7=BA=BF=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BaseFun/include/CallGlobalManage.h | 2 + DataMgr/src/CurveComputePage.cpp | 4 + DataMgr/src/CurveComputerDlg.cpp | 6 +- DataMgr/src/DataManagger.cpp | 678 +++++++++++----------- WellLogUI/include/WellLogTableDialogNew.h | 1 + WellLogUI/src/WellLogTableDialogNew.cpp | 7 +- WellLogUI/src/griddataadapter.cpp | 1 + logPlus/qtprojectwidgets.cpp | 35 +- logPlus/qtprojectwidgets.h | 1 + 9 files changed, 392 insertions(+), 343 deletions(-) diff --git a/BaseFun/include/CallGlobalManage.h b/BaseFun/include/CallGlobalManage.h index 109238b..1cedd30 100644 --- a/BaseFun/include/CallGlobalManage.h +++ b/BaseFun/include/CallGlobalManage.h @@ -44,6 +44,8 @@ signals: // 添加对象通知strName:发送模块名字(如DataMgr) strSlfName:Slf文件名,对象名列表(如AC、BS) void sig_Notice_AddObject(QString strName, QString strSlfName, QStringList listObject); + // 改变对象通知strName:发送模块名字(如DataMgr) strSlfName:Slf文件名,对象名列表(如AC、BS) + void sig_Notice_Changed(QString strName, QString strSlfName, QStringList listObject); public: Q_DISABLE_COPY(CallGlobalManage); }; diff --git a/DataMgr/src/CurveComputePage.cpp b/DataMgr/src/CurveComputePage.cpp index 3f9d864..82ed232 100644 --- a/DataMgr/src/CurveComputePage.cpp +++ b/DataMgr/src/CurveComputePage.cpp @@ -4,6 +4,7 @@ #include // #include "DataImport.h" // #include "ObjProject.h" +#include "CallGlobalManage.h" CurveComputePage::CurveComputePage(QWidget *parent) : QWidget(parent) { @@ -281,6 +282,9 @@ void CurveComputePage::slotComputeOk() CurveNames.push_back(fun.csOutName.toUpper()); delete mrw; emit signalCompute(CurveNames); + QStringList CurveNames1; + CurveNames1.push_back(fun.csOutName.toUpper()); + emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", m_FileName, CurveNames1); // PaiObject::m_EventAgent.ObjectPropertyChanged(::GetProject(),"Compute",CurveNames); } diff --git a/DataMgr/src/CurveComputerDlg.cpp b/DataMgr/src/CurveComputerDlg.cpp index e65332a..32ddf9f 100644 --- a/DataMgr/src/CurveComputerDlg.cpp +++ b/DataMgr/src/CurveComputerDlg.cpp @@ -9,6 +9,7 @@ #include "MemRdWt.h" // #include "ObjProject.h" #include "Well.h" +#include "CallGlobalManage.h" #pragma warning(pop) using namespace pai::ios::welllog; BEGIN_OSGGRAPHICS_NAMESPACE @@ -245,7 +246,10 @@ void CCurveComputerDlg::slotSave() } delete mrw; // PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames); - QMessageBox::warning(NULL,"提示","完成曲线计算"); + QStringList CurveNames1; + CurveNames1.push_back(name); + emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", FileName, CurveNames1); + QMessageBox::warning(this,"提示","完成曲线计算"); //accept(); } /** diff --git a/DataMgr/src/DataManagger.cpp b/DataMgr/src/DataManagger.cpp index 35fb28b..756912b 100644 --- a/DataMgr/src/DataManagger.cpp +++ b/DataMgr/src/DataManagger.cpp @@ -801,24 +801,24 @@ void CDataManagger::DataStatistics(int Type, // //whp add 2020.4.9 for 波列曲线预览 // void CDataManagger::DisplayWave(const QString& FileName,const QString& WaveName) // { -// CLogIO *logio=new CLogIO(); -// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) -// { -// delete logio; -// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误"); -// return ; -// } -// int index=logio->OpenWave(WaveName.toStdString().c_str()); -// if(index<0){ -// delete logio; -// return; -// } -// logio->CloseWave(index); -// delete logio; -// ShowWave *pDlg=new ShowWave(); -// pDlg->FileName=FileName,pDlg->WaveName=WaveName; -// pDlg->init(); -// pDlg->show(); +// CLogIO *logio=new CLogIO(); +// if(!logio->Open(FileName.toStdString().c_str(),CSlfIO::modeRead)) +// { +// delete logio; +// QMessageBox::warning(NULL,"提示","打开文件"+FileName+"错误"); +// return ; +// } +// int index=logio->OpenWave(WaveName.toStdString().c_str()); +// if(index<0){ +// delete logio; +// return; +// } +// logio->CloseWave(index); +// delete logio; +// ShowWave *pDlg=new ShowWave(); +// pDlg->FileName=FileName,pDlg->WaveName=WaveName; +// pDlg->init(); +// pDlg->show(); // } // //whp add 2020.5.12 for 常规曲线预览 // void CDataManagger::DisplayCurve(const QString& FileName,const QString& CurveName) @@ -1462,239 +1462,241 @@ void CDataManagger::accept2() } void CDataManagger::accept1() { -// QDialog*pd=(QDialog*)sender(); -// int sdep=m_edit1->text().toFloat(); -// int edep=m_edit2->text().toFloat(); -// if(sdep>edep) -// { -// QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes); -// return; -// } -// QString newCurve; -// CMemRdWt *mrw=new CMemRdWt(); -// if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { -// delete mrw; -// return; -// } -// QString m_Function=m_edit3->text(); -// m_Function.toUpper(); -// m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP"); -// bool OutCurveExist=1; -// float CurveValue,rlev; -// Function fun; -// int noi=fun.GetExpress(m_Function); -// if(noi<0) -// { -// delete mrw; -// return ;//输入公式中没有“=”号,或含有不能处理的字符 -// } -// //检查公式合理性 -// for(int j=0;j0) -// { -// static char *e[]={ -// "语法错误",//"syntax error.", -// "不对称的括号",//"unbalanced parentheses", -// "非法运算符"//"no expression present" -// }; -// QMessageBox::warning(pd,"提示",QString(QLatin1String(e[re-1]))+m_Function); -// delete mrw; -// return ; -// } -// char name[20]; -// strcpy(name,fun.csOutName.toStdString().c_str()); -// int in=mrw->FindObjectIndex(name); -// if(in>=0) -// { -// short objectType=mrw->GetObjectType(in); -// short Attribute,SubAttribute; -// mrw->GetObjectAttribute(in,&Attribute,&SubAttribute); -// if(mrw->GetObjectStatus(in)!=0)//删除状态 -// { -// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!"); -// delete mrw; -// return ; -// } -// if(objectType >CARD_OBJECT||objectType==0||objectType==CURVE_OBJECT) -// { + QDialog*pd=(QDialog*)sender(); + int sdep=m_edit1->text().toFloat(); + int edep=m_edit2->text().toFloat(); + if(sdep>edep) + { + QMessageBox::information(pd,"提示","起始深度不能大于终止深度!",QMessageBox::Yes); + return; + } + QString newCurve; + CMemRdWt *mrw=new CMemRdWt(); + if(!mrw->Open(m_FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { + delete mrw; + return; + } + QString m_Function=m_edit3->text(); + m_Function.toUpper(); + m_Function.replace("\"DEPTH\"","CURRENT_HD.DEP"); + bool OutCurveExist=1; + float CurveValue,rlev; + Function fun; + int noi=fun.GetExpress(m_Function); + if(noi<0) + { + delete mrw; + return ;//输入公式中没有“=”号,或含有不能处理的字符 + } + //检查公式合理性 + for(int j=0;j0) + { + static const char *e[]={ + "语法错误",//"syntax error.", + "不对称的括号",//"unbalanced parentheses", + "非法运算符"//"no expression present" + }; + QMessageBox::warning(pd,"提示",QString(QLatin1String(e[re-1]))+m_Function); + delete mrw; + return ; + } + char name[20]; + strcpy(name,fun.csOutName.toStdString().c_str()); + int in=mrw->FindObjectIndex(name); + if(in>=0) + { + short objectType=mrw->GetObjectType(in); + short Attribute,SubAttribute; + mrw->GetObjectAttribute(in,&Attribute,&SubAttribute); + if(mrw->GetObjectStatus(in)!=0)//删除状态 + { + QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"曲线已存在,但该曲线处于删除状态,无法进行计算 !!!"); + delete mrw; + return ; + } + if(objectType >CARD_OBJECT||objectType==0||objectType==CURVE_OBJECT) + { -// } -// else -// { -// QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!"); -// delete mrw; -// return ; -// } -// } -// else -// { // 导入曲线不存在 -// QString ss="目标曲线"+fun.csOutName+"不存在 \n 是否生成 ?\n"; -// int flag = QMessageBox::warning(m_pDialog,tr("提示"),ss,QMessageBox::Yes,QMessageBox::No); -// if(flag != QMessageBox::Yes){ -// delete mrw; -// return ; -// } -// OutCurveExist=0; -// } -// int index[20],indexout; -// float MinRlev=9999; -// DWORD CurveSample[20]; -// float CurveRlev[20]; -// Slf_CURVE info; -// for(int i=0;iGetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT) -// { -// QMessageBox::warning(m_pDialog,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式"); -// delete mrw; -// return ; -// } -// index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str()); -// if(index[i]<0) -// { -// delete mrw; -// QMessageBox::warning(m_pDialog,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!"); -// return ; -// } -// mrw->GetCurveInfo(index[i],&info); -// if(MinRlev>info.DepLevel)MinRlev=info.DepLevel; -// CurveRlev[i]=info.DepLevel; -// } -// if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识 -// //生成导入曲线 + } + else + { + QMessageBox::warning(m_pDialog,"提示",fun.csOutName+"对象已存在,但其属性不是曲线 !!!"); + delete mrw; + return ; + } + } + else + { // 导入曲线不存在 + QString ss="目标曲线"+fun.csOutName+"不存在 \n 是否生成 ?\n"; + int flag = QMessageBox::warning(m_pDialog,tr("提示"),ss,QMessageBox::Yes,QMessageBox::No); + if(flag != QMessageBox::Yes){ + delete mrw; + return ; + } + OutCurveExist=0; + } + int index[20],indexout; + float MinRlev=9999; + DWORD CurveSample[20]; + float CurveRlev[20]; + Slf_CURVE info; + for(int i=0;iGetObjectType(fun.csName[i].toStdString().c_str())!=CURVE_OBJECT) + { + QMessageBox::warning(m_pDialog,"提示","输入曲线"+fun.csName[i]+"不是曲线类型,不能进行计算!!!\r\n请参考常规曲线计算规则,输入正确的计算公式"); + delete mrw; + return ; + } + index[i]=mrw->OpenCurve(fun.csName[i].toStdString().c_str()); + if(index[i]<0) + { + delete mrw; + QMessageBox::warning(m_pDialog,"提示","打开曲线"+fun.csName[i]+"出错,不能进行计算!!!"); + return ; + } + mrw->GetCurveInfo(index[i],&info); + if(MinRlev>info.DepLevel)MinRlev=info.DepLevel; + CurveRlev[i]=info.DepLevel; + } + if(MinRlev==9999)MinRlev=0.125;//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识 + //生成导入曲线 -// if(OutCurveExist==0) -// { -// indexout=-1; -// for(int i=0;iGetCurveInfo(index[i],&info); -// sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str()); -// sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str()); -// info.StartDepth=m_edit1->text().toFloat(); -// info.EndDepth=m_edit2->text().toFloat(); -// indexout=mrw->OpenCurve(&info); -// break; -// } -// if(indexout==-1)//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识 -// { -// newCurve=fun.csOutName; -// sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str()); -// sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str()); -// info.StartDepth=m_edit1->text().toFloat(); -// info.EndDepth=m_edit2->text().toFloat(); -// info.DepLevel=0.125; -// info.CodeLen=4; -// info.RepCode=4; -// info.DefVal=-999.25; -// info.MaxValue=100; -// info.MinValue=0; -// strcpy(info.DepthHZUnit,"米"); -// strcpy(info.DepthUnit,"m"); -// strcpy(info.Unit,""); -// strcpy(info.AliasUnit,""); -// indexout=mrw->OpenCurve(&info); -// } -// } -// else -// { -// indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str()); -// if(indexout>-1)mrw->GetCurveInfo(indexout,&info); -// } -// if(indexout<0) -// { -// delete mrw; -// QMessageBox::warning(m_pDialog,"提示","导入曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则,输入正确的计算公式"); -// return ; -// } -// //检查导入曲线深度 -// rlev = info.DepLevel; -// sdep = info.StartDepth; -// edep = info.EndDepth ; -// if(MinRlev>rlev)MinRlev=rlev; -// if ( m_edit1->text().toFloat() < sdep-rlev || m_edit2->text().toFloat() > edep+rlev) -// { -// int flag=QMessageBox::warning(m_pDialog,"提示","导入曲线的深度范围("+m_edit1->text()+"--"+m_edit2->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No); -// if(flag != QMessageBox::Yes){ -// delete mrw; -// return ; -// } -// } -// int sample=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/rlev+1.5);//0.5); -// int sampleIn=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/MinRlev+1.5);//0.5); -// float **indata,*outdata; -// indata=new float*[noi]; -// outdata=new float[sample+10]; -// float *tDep,*aDep; -// tDep=new float[sample]; -// for(int k=0; ktext().toFloat()-m_edit1->text().toFloat())/CurveRlev[j]+1.5;//0.5; -// mrw->ReadCurve(index[j],m_edit1->text().toFloat(),CurveSample[j],&indata[j][0]); -// if(fabs(CurveRlev[j]-rlev)/rlev>0.1) -// { -// aDep=new float[CurveSample[j]]; -// for(int k=0; ktext().toFloat()+i*rlev; -// else fun.val[j]=indata[j][i]; -// } -// fun.prog=fun.TempProg; -// fun.get_exp(&CurveValue); -// outdata[i]=CurveValue; -// //2013.11.20 whp add for 为曲线计算添加数值类型选项:常规,不控制数值大小;方位:控制到0-360 + if(OutCurveExist==0) + { + indexout=-1; + for(int i=0;iGetCurveInfo(index[i],&info); + sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str()); + sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str()); + info.StartDepth=m_edit1->text().toFloat(); + info.EndDepth=m_edit2->text().toFloat(); + indexout=mrw->OpenCurve(&info); + break; + } + if(indexout==-1)//表达式中没有实际曲线,只有CURRENT_HD.DEP“深度”标识 + { + newCurve=fun.csOutName; + sprintf(info.AliasName,"%s",fun.csOutName.toStdString().c_str()); + sprintf(info.Name,"%s",fun.csOutName.toStdString().c_str()); + info.StartDepth=m_edit1->text().toFloat(); + info.EndDepth=m_edit2->text().toFloat(); + info.DepLevel=0.125; + info.CodeLen=4; + info.RepCode=4; + info.DefVal=-999.25; + info.MaxValue=100; + info.MinValue=0; + strcpy(info.DepthHZUnit,"米"); + strcpy(info.DepthUnit,"m"); + strcpy(info.Unit,""); + strcpy(info.AliasUnit,""); + indexout=mrw->OpenCurve(&info); + } + } + else + { + indexout=mrw->OpenCurve(fun.csOutName.toStdString().c_str()); + if(indexout>-1)mrw->GetCurveInfo(indexout,&info); + } + if(indexout<0) + { + delete mrw; + QMessageBox::warning(m_pDialog,"提示","导入曲线不存在,而且输入曲线中没有可参考的常规曲线,无法进行曲线计算\r\n请参考常规曲线计算规则,输入正确的计算公式"); + return ; + } + //检查导入曲线深度 + rlev = info.DepLevel; + sdep = info.StartDepth; + edep = info.EndDepth ; + if(MinRlev>rlev)MinRlev=rlev; + if ( m_edit1->text().toFloat() < sdep-rlev || m_edit2->text().toFloat() > edep+rlev) + { + int flag=QMessageBox::warning(m_pDialog,"提示","导入曲线的深度范围("+m_edit1->text()+"--"+m_edit2->text()+")超出输入曲线("+QString::number(sdep)+"--"+QString::number(edep)+"\n继续计算吗?",QMessageBox::Yes,QMessageBox::No); + if(flag != QMessageBox::Yes){ + delete mrw; + return ; + } + } + int sample=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/rlev+1.5);//0.5); + int sampleIn=(int)((m_edit2->text().toFloat()-m_edit1->text().toFloat())/MinRlev+1.5);//0.5); + float **indata,*outdata; + indata=new float*[noi]; + outdata=new float[sample+10]; + float *tDep,*aDep; + tDep=new float[sample]; + for(int k=0; ktext().toFloat()-m_edit1->text().toFloat())/CurveRlev[j]+1.5;//0.5; + mrw->ReadCurve(index[j],m_edit1->text().toFloat(),CurveSample[j],&indata[j][0]); + if(fabs(CurveRlev[j]-rlev)/rlev>0.1) + { + aDep=new float[CurveSample[j]]; + for(int k=0; ktext().toFloat()+i*rlev; + else fun.val[j]=indata[j][i]; + } + fun.prog=fun.TempProg; + fun.get_exp(&CurveValue); + outdata[i]=CurveValue; + //2013.11.20 whp add for 为曲线计算添加数值类型选项:常规,不控制数值大小;方位:控制到0-360 -// } -// mrw->WriteCurve(indexout,m_edit1->text().toFloat(),sample,&outdata[0]); -// delete []tDep; + } + mrw->WriteCurve(indexout,m_edit1->text().toFloat(),sample,&outdata[0]); + delete []tDep; -// for (int i=0; iCloseCurve(index[i]); -// } -// mrw->CloseCurve(indexout); + for (int i=0; iCloseCurve(index[i]); + } + mrw->CloseCurve(indexout); -// for(int j=0;jGetFileMessage(msag); -// delete mrw; -// GetObjectEvent().OnDeAttchData(m_FileName,fun.csOutName); -// GetObjectEvent().OnRefreshData(m_FileName,fun.csOutName,this); + for(int j=0;jGetFileMessage(msag); + delete mrw; + // GetObjectEvent().OnDeAttchData(m_FileName,fun.csOutName); + // GetObjectEvent().OnRefreshData(m_FileName,fun.csOutName,this); -// QStringList CurveNames; -// CurveNames.push_back(msag.WellName); -// CurveNames.push_back(m_FileName); -// CurveNames.push_back(fun.csOutName); -// if(!newCurve.isEmpty())CurveNames.push_back(newCurve); -// PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames); - -// QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok); + QStringList CurveNames; + CurveNames.push_back(msag.WellName); + CurveNames.push_back(m_FileName); + CurveNames.push_back(fun.csOutName); + if(!newCurve.isEmpty())CurveNames.push_back(newCurve); + // PaiObject::m_EventAgent.ObjectPropertyChanged(GetProject(),"Compute",CurveNames); + QStringList CurveNames1; + CurveNames1.append(fun.csOutName); + emit CallGlobalManage::getInstance()->sig_Notice_Changed("DataMgr", m_FileName, CurveNames1); + QMessageBox::information(m_pDialog,"提示","计算完毕!",QMessageBox::Ok); } //曲线计算 // void CDataManagger::CurveCompute(QListobjs,int no) @@ -1783,101 +1785,101 @@ void CDataManagger::accept1() // } // } -// void CDataManagger::CurveCompute(const QString& FileName,const QStringList& CurveNameList) -// { -// m_CurveNameList=CurveNameList; -// if(CurveNameList.count()==1) -// { -// QDialog dialog(NULL); -// dialog.setModal(false); -// m_pDialog=&dialog; -// Qt::WindowFlags flags = dialog.windowFlags(); -// flags |= Qt::WindowStaysOnTopHint; -// flags &= ~Qt::WindowContextHelpButtonHint; -// dialog.setWindowFlags(flags); -// dialog.setWindowTitle(QString("曲线计算")); -// QFormLayout form(&dialog); -// QString CurveName=CurveNameList[0]; +void CDataManagger::CurveCompute(const QString& FileName,const QStringList& CurveNameList) +{ + m_CurveNameList=CurveNameList; + if(CurveNameList.count()==1) + { + QDialog dialog(NULL); + dialog.setModal(false); + m_pDialog=&dialog; + Qt::WindowFlags flags = dialog.windowFlags(); + flags |= Qt::WindowStaysOnTopHint; + flags &= ~Qt::WindowContextHelpButtonHint; + dialog.setWindowFlags(flags); + dialog.setWindowTitle(QString("曲线计算")); + QFormLayout form(&dialog); + QString CurveName=CurveNameList[0]; -// m_CurveName=CurveNameList[0]; -// m_FileName=FileName; -// CMemRdWt *mrw=new CMemRdWt(); -// if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { -// delete mrw; -// return; -// } -// int index=mrw->OpenCurve(CurveName.toStdString().c_str()); -// if(index<0) { -// delete mrw; -// return; -// } -// Slf_CURVE pInfo; -// mrw->GetCurveInfo(index,&pInfo); -// Slf_FILE_MESSAGE msag; -// mrw->GetFileMessage(msag); -// delete mrw; -// // 开始深度 -// QString value1 = QString("开始深度: "); -// QLineEdit *edit1 = new QLineEdit(&dialog); -// m_edit1=edit1; -// form.addRow(value1, edit1); -// edit1->setText(QString::number(pInfo.StartDepth)); -// edit1->setValidator(new QDoubleValidator(-9999999,9999999,6,this)); + m_CurveName=CurveNameList[0]; + m_FileName=FileName; + CMemRdWt *mrw=new CMemRdWt(); + if(!mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { + delete mrw; + return; + } + int index=mrw->OpenCurve(CurveName.toStdString().c_str()); + if(index<0) { + delete mrw; + return; + } + Slf_CURVE pInfo; + mrw->GetCurveInfo(index,&pInfo); + Slf_FILE_MESSAGE msag; + mrw->GetFileMessage(msag); + delete mrw; + // 开始深度 + QString value1 = QString("开始深度: "); + QLineEdit *edit1 = new QLineEdit(&dialog); + m_edit1=edit1; + form.addRow(value1, edit1); + edit1->setText(QString::number(pInfo.StartDepth)); + edit1->setValidator(new QDoubleValidator(-9999999,9999999,6,this)); -// // 终止深度 -// QString value2 = QString("终止深度: "); -// QLineEdit *edit2 = new QLineEdit(&dialog); -// edit2->setValidator(new QDoubleValidator(-9999999,9999999,6,this)); -// m_edit2=edit2; -// form.addRow(value2, edit2); -// edit2->setText(QString::number(pInfo.EndDepth)); -// //计算公式 -// QString value3 = QString("计算公式: "); -// QLineEdit *edit3 = new QLineEdit(&dialog); -// form.addRow(value3, edit3); -// QString ss=CurveName+"=1.0*"+CurveName+"+0.0"; -// edit3->setText(ss); -// m_edit2=edit2; -// m_edit3=edit3; -// QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+ -// QString(" 如:PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数"); -// QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+ -// QString(" 如:GR=2*GR+5;GR2=45;TEMP=18+0.038*\"DEPTH\"\n")+ -// QString(" 其中:\"DEPTH\"表示深度;\n")+ -// QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+ -// QString(" 否则,程序自动产生一条浮点类型的导入曲线,采样间隔为0.125。"); -// form.addRow(new QLabel(value4)); -// form.addRow(new QLabel(value5)); -// // Add Cancel and OK button -// QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, -// Qt::Horizontal, &dialog); -// form.addRow(&buttonBox); -// QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept1())); -// QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); -// // Process when OK button is clicked -// dialog.show(); -// if (dialog.exec() == QDialog::Accepted) -// { -// } -// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL); -// } -// else -// { -// CCurveComputerDlg *pDlg=new CCurveComputerDlg(); -// pDlg->FileName=FileName; -// pDlg->CurveNameList=CurveNameList; -// pDlg->init();//FileName, CurveNameList); -// pDlg->setModal(false); -// Qt::WindowFlags flags = pDlg->windowFlags(); -// flags |= Qt::WindowStaysOnTopHint; -// pDlg->setWindowFlags(flags); -// pDlg->exec(); -// delete pDlg; -// pDlg=NULL; -// pai::graphics::CDataImport::ChangetoSlf(FileName,NULL); -// QMessageBox::information(NULL,"提示","计算完毕!",QMessageBox::Ok); -// } -// } + // 终止深度 + QString value2 = QString("终止深度: "); + QLineEdit *edit2 = new QLineEdit(&dialog); + edit2->setValidator(new QDoubleValidator(-9999999,9999999,6,this)); + m_edit2=edit2; + form.addRow(value2, edit2); + edit2->setText(QString::number(pInfo.EndDepth)); + //计算公式 + QString value3 = QString("计算公式: "); + QLineEdit *edit3 = new QLineEdit(&dialog); + form.addRow(value3, edit3); + QString ss=CurveName+"=1.0*"+CurveName+"+0.0"; + edit3->setText(ss); + m_edit2=edit2; + m_edit3=edit3; + QString value4 = QString("\n常用数学运算符:\n 加:+,减:-,乘:*,除:/,取余:%,乘方:^,对数:!\n")+ + QString(" 如:PAR =SP/CAL+RT^2.5-10!AC\n 10!表示取以10为底的对数,1! 表示取自然对数"); + QString value5 = QString("\n规则及约定:\n 1、输入对象必须是常规曲线名、深度标识或常量\n")+ + QString(" 如:GR=2*GR+5;GR2=45;TEMP=18+0.038*\"DEPTH\"\n")+ + QString(" 其中:\"DEPTH\"表示深度;\n")+ + QString(" 2、当导入曲线不存在时:\n 如果有输入曲线存在,程序自动根据第一条输入曲线的属性产生导入曲线;\n")+ + QString(" 否则,程序自动产生一条浮点类型的导入曲线,采样间隔为0.125。"); + form.addRow(new QLabel(value4)); + form.addRow(new QLabel(value5)); + // Add Cancel and OK button + QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, + Qt::Horizontal, &dialog); + form.addRow(&buttonBox); + QObject::connect(&buttonBox, SIGNAL(accepted()), this, SLOT(accept1())); + QObject::connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); + // Process when OK button is clicked + dialog.show(); + if (dialog.exec() == QDialog::Accepted) + { + } + CDataImport::ChangetoSlf(FileName,NULL); + } + else + { + CCurveComputerDlg *pDlg=new CCurveComputerDlg(); + pDlg->FileName=FileName; + pDlg->CurveNameList=CurveNameList; + pDlg->init();//FileName, CurveNameList); + pDlg->setModal(false); + Qt::WindowFlags flags = pDlg->windowFlags(); + flags |= Qt::WindowStaysOnTopHint; + pDlg->setWindowFlags(flags); + pDlg->exec(); + delete pDlg; + pDlg=NULL; + CDataImport::ChangetoSlf(FileName,NULL); + QMessageBox::information(NULL,"提示","计算完毕!",QMessageBox::Ok); + } +} void CDataManagger::CallDisplayWaveOrCurve(int Type, const QString& FileName, const QString& CurveName, QWidget* parent) diff --git a/WellLogUI/include/WellLogTableDialogNew.h b/WellLogUI/include/WellLogTableDialogNew.h index deb6ac0..a738441 100644 --- a/WellLogUI/include/WellLogTableDialogNew.h +++ b/WellLogUI/include/WellLogTableDialogNew.h @@ -77,6 +77,7 @@ private slots: void slotImport(); void slotExpdView(); void slotVerScrollValueChange(int nValue); + void s_Notice_Changed(QString strName, QString strSlfName, QStringList listObject); private: void swtichViewSize(); diff --git a/WellLogUI/src/WellLogTableDialogNew.cpp b/WellLogUI/src/WellLogTableDialogNew.cpp index e900e22..8c8294f 100644 --- a/WellLogUI/src/WellLogTableDialogNew.cpp +++ b/WellLogUI/src/WellLogTableDialogNew.cpp @@ -52,6 +52,7 @@ WellLogTableDialogNew::WellLogTableDialogNew(QWidget *parent, Qt::WindowFlags fl connect(m_pUI->btnExport, SIGNAL(clicked()), this, SLOT(slotExport())); connect(m_pUI->btnImport, SIGNAL(clicked()), this, SLOT(slotImport())); connect(m_pUI->btnExpView, SIGNAL(clicked()), this, SLOT(slotExpdView())); + connect(CallGlobalManage::getInstance(), SIGNAL(sig_Notice_Changed(QString, QString, QStringList)), this, SLOT(s_Notice_Changed(QString, QString, QStringList))); m_DataTyle=valid_NULL; m_pUI->btnExport->setIcon(QIcon( ::GetImagePath() + "icon/Export.png")); m_pUI->btnImport->setIcon(QIcon( ::GetImagePath() + "icon/Import.png")); @@ -82,6 +83,10 @@ void WellLogTableDialogNew::slotExpdView() } } +void WellLogTableDialogNew::s_Notice_Changed(QString strName, QString strSlfName, QStringList listObject) +{ + ReFreshWindow(0); +} void WellLogTableDialogNew::swtichViewSize() { @@ -161,7 +166,7 @@ void WellLogTableDialogNew::swtichViewSize() void WellLogTableDialogNew::ReFreshWindow(int type) { -// m_gridData->ReFreshWindow(m_gridData->m_dtype); + m_gridData->ReFreshWindow(m_gridData->m_dtype); } void WellLogTableDialogNew::slotExport() diff --git a/WellLogUI/src/griddataadapter.cpp b/WellLogUI/src/griddataadapter.cpp index 71f202b..18ded82 100644 --- a/WellLogUI/src/griddataadapter.cpp +++ b/WellLogUI/src/griddataadapter.cpp @@ -682,6 +682,7 @@ void GridDataAdapter::ReFreshWindow(int type) m_pWellLogs[i]->isLoad=false; m_pWellLogs[i]->LoadFromSLF(); } + slotHorScrollBarPressed();// 防止滑动滚动条后不刷新 updatetWellLogData(); } diff --git a/logPlus/qtprojectwidgets.cpp b/logPlus/qtprojectwidgets.cpp index b3149b2..2f77373 100644 --- a/logPlus/qtprojectwidgets.cpp +++ b/logPlus/qtprojectwidgets.cpp @@ -42,6 +42,7 @@ QtProjectWidgets::QtProjectWidgets(QWidget *parent) QtCommonClass *qtCommon = new QtCommonClass(this); qtCommon->setButtonIconWithText(ui->btnFind, ::GetImagePath()+"crossplot/search.png", "", font, _fontColor); + magr=new CDataManagger(); //initTreeWidget("", "wwer"); connect(ui->btnFind, &QPushButton::clicked, this, [ = ]() @@ -920,6 +921,11 @@ void QtProjectWidgets::initCurveObjectTreeMenu(QMenu *menu, QTreeWidget *treeWid connect(action_InfoEdit, SIGNAL(triggered()), this, SLOT(onInfoEdit())); menu->addAction(action_InfoEdit); + QAction* action_CurveCompute = new QAction("曲线计算", treeWidget); + action_CurveCompute->setIcon(QIcon(GetImagePath() + "icon/AddToTrack.png")); + connect(action_CurveCompute, SIGNAL(triggered()), this, SLOT(onCurveCompute())); + menu->addAction(action_CurveCompute); + QAction* action_Copy = new QAction("复制", treeWidget); action_Copy->setIcon(QIcon(GetImagePath() + "icon/Copy.png")); // 设置图标":/image/u174.png" connect(action_Copy, SIGNAL(triggered()), this, SLOT(onCopySelObject())); @@ -1610,6 +1616,29 @@ void QtProjectWidgets::onWaveCompose(bool checked) // pwelllog->SetWell(pObjWellLog->GetWelllogRound()->GetWell()); } +void QtProjectWidgets::onCurveCompute(bool checked) +{ + if (NULL==magr) + { + return; + } + QTreeWidgetItem *pItemFirst = *(ui->treeWidget->selectedItems().begin()); + QString FileName=pItemFirst->data(0, Qt::UserRole+1).toString(); + QStringList CurveNameList; + foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems()) + { + QString strTreeTag = pItem->data(0, Qt::UserRole).toString(); + if (strTreeTag == "curveObject" && FileName==pItem->data(0, Qt::UserRole+1).toString()) + { + CurveNameList.append(pItem->text(0)); + } + else + return; + } + + magr->CurveCompute(FileName,CurveNameList); +} + void QtProjectWidgets::onInfoEdit(bool checked)//whp add 2019.12.27 曲线属性编辑 { if (ui->treeWidget->selectedItems().size()>1) @@ -2190,10 +2219,10 @@ void QtProjectWidgets::onPasteSelObject() // 粘贴 foreach(QTreeWidgetItem *pItem, ui->treeWidget->selectedItems()) { QTreeWidgetItem *parentItem = pItem/*->parent()*/; // 上一层目录是井次 - if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) + if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) RefreshWellRoundTree(parentItem); parentItem = parentItem = pItem->parent(); - if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) + if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) RefreshWellRoundTree(parentItem); break; } @@ -2290,7 +2319,7 @@ void QtProjectWidgets::onPasteWell() //刷新井次树 void QtProjectWidgets::RefreshWellRoundTree(QTreeWidgetItem *parentItem) { - if (parentItem && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) + if (parentItem && "wellItem" == parentItem->data(0, Qt::UserRole).toString() && m_strSlfName == parentItem->data(0, Qt::UserRole+1).toString()) { // qDeleteAll(parentItem->takeChildren()); QTreeWidgetItem *pWellItem = parentItem->parent(); diff --git a/logPlus/qtprojectwidgets.h b/logPlus/qtprojectwidgets.h index 8321ba6..1ef26eb 100644 --- a/logPlus/qtprojectwidgets.h +++ b/logPlus/qtprojectwidgets.h @@ -60,6 +60,7 @@ public slots: void onDepthResample(bool checked = false); //深度重采样 void onCurve2Table(bool checked = false); //转换为结论表格 void onWaveCompose(bool checked = false); //合成阵列曲线 + void onCurveCompute(bool checked = false); //曲线计算 void onInfoEdit(bool checked = false); //属性 //TDT