#include "myunitui.h" #include "ui_myunitui.h" #include "PluginName.h" #include "MemRdWt.h" #include #include //固井结构体(注:此处为表格输出示例) typedef struct ss_struct { int GNO; float GSDEP,GEDEP; int GRESULT; } GUJING; MyUnitUI::MyUnitUI(QWidget *parent) : QWidget(parent), ui(new Ui::MyUnitUI) { ui->setupUi(this); //保存logplus窗口句柄 m_mainParentWindow = (QMainWindow *)parent; //绑定logplus信号槽 connect(this, SIGNAL(sig_PluginMsg(QString)), m_mainParentWindow, SLOT(s_PluginMsg(QString))); //测试用 //点击按钮 connect(ui->pushButton, &QPushButton::clicked, this, [ = ]() { s_ButtonClick(); }); } MyUnitUI::~MyUnitUI() { delete ui; } QString MyUnitUI::getParams() { return ui->lineEdit->text(); } void MyUnitUI::setParams(QString &strParams) { if (strParams.length() <= 0) { return; } QJsonParseError err_rpt; QJsonDocument root_Doc = QJsonDocument::fromJson(strParams.toStdString().c_str(), &err_rpt);//字符串格式化为JSON if (err_rpt.error != QJsonParseError::NoError) { return; } QJsonObject root_Obj = root_Doc.object(); if (root_Obj.contains("prjname")) { // 获取当前项目名称 m_strPrjName = root_Obj.value("prjname").toString(); ui->lineEdit->setText(m_strPrjName); } } QAction *MyUnitUI::createAction() { //下面, 平台显示按钮, 如需要平台显示解开注释 // m_pAction = new QAction(); if(m_pAction) { m_pAction->setText("直方图"); // 按钮显示文字 m_pAction->setToolTip("直方图"); // 鼠标移动到按钮显示tip m_pAction->setIcon( QIcon(":/image/zfu.png")); // 按钮显示图片 m_pAction->setProperty("PluginName", PLUGINUNIT); // 模块名字 } return m_pAction; } //测试按钮 void MyUnitUI::s_ButtonClick() { QVector vecSlfList; QVector vecWellList; // 根据当前项目名称获取当前项目的slf文件,获取当前项目井文件 bool bret = CMemRdWt::getPrjAllSlf(m_strPrjName, vecSlfList, vecWellList); if(vecSlfList.size() > 0) { CMemRdWt *pMemRdWt=new CMemRdWt(); //(1)初始化参数、输入 pMemRdWt->Const(); pMemRdWt->In(); if(!pMemRdWt->Open(vecSlfList.at(6).toStdString().c_str(),CMemRdWt::modeReadWrite)) { delete pMemRdWt; return; } //(2)波形类型的输出数据初始化检查 char outname[2][16]; int OUTindex = 0, WaveIndex = 0; pMemRdWt->GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称,参数1是序列值(从0开始)(注:波形/曲线均使用GetOutCurveName函数) float fSdep = 2900; //设置起始深度 float fEdep = 3000; //设置结束深度 float fRlev = 0.0; //设置采样间隔 int index1 = pMemRdWt->OpenWave(outname[OUTindex]);//检查是否存在outname[OUTindex]波形 if(index1 < 0) //返回索引小于0说明没有该波形,需要创建 { //创建方式: Slf_WAVE myWave; strcpy(myWave.Name, outname[OUTindex]); strcpy(myWave.AliasName, outname[OUTindex]); strcpy(myWave.DepthUnit, "m"); myWave.CodeLen = 4; myWave.RepCode = 4; myWave.DefVal = 0; myWave.StartDepth = fSdep; myWave.EndDepth = fEdep; myWave.DepLevel = fRlev; strcpy(myWave.DepthUnit, "m"); myWave.StartTime = 0; //起始记录时间 myWave.TimeLevel = 5; //时间采样间隔 myWave.ArrayNum = 1; //阵列数 myWave.TimeSamples = 36; //时间采样总数 strcpy(myWave.TimeUnit, "ns"); //时间单位 index1 = pMemRdWt->OpenWave((Slf_WAVE *)&myWave); //创建波形(注:此时返回索引应>1,代表创建成功) } if(index1 < 0) { return; }else { WaveIndex = index1; } //(3)曲线类型的输出数据初始化检查 OUTindex = 1;//按extern "C"中定义的输出数据顺序设置 pMemRdWt->GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称,参数1是序列值(从0开始) index1 = pMemRdWt->OpenCurve(outname[1]);//index1 = MemRdWt.OpenCurve("EEE");//检查数据是否存在//outname[OUTindex] if(index1 < 0) //返回索引小于0说明没有这条曲线,需要创建 { //创建方式: Slf_CURVE myCurve; //定义曲线对象 strcpy(myCurve.Name, outname[1]); //设置名称 strcpy(myCurve.AliasName, outname[1]); //设置别名 strcpy(myCurve.Unit, "m"); //设置数据单位 myCurve.CodeLen = 4; //设置字节长度(注:4float) myCurve.RepCode = 4; //设置数据类型(注:4float) myCurve.DefVal = 0; //设置默认值 myCurve.StartDepth = fSdep; //设置起始深度 myCurve.EndDepth = fEdep; //设置结束深度 myCurve.DepLevel = fRlev; //设置采样间隔 strcpy(myCurve.DepthUnit, "m"); //设置深度单位 index1 = pMemRdWt->OpenCurve((Slf_CURVE *)&myCurve); //创建曲线(注:此时返回索引应>1,代表创建成功) } if(index1 < 0) { return; } /*************************************************向平台写表格示例************************************************************* *****************************begin****************************/ //(1)固井结论表格 int itable1 = pMemRdWt->OpenOG_RESULT("固井质量");//例如表格取名为“固井质量” pMemRdWt->SetTableRecordCount(itable1, 0); //清空原有表格数据 GUJING *CCNN2 = new GUJING[5]; for(int i = 0; i < 5; i++) { CCNN2[i].GNO = i + 1; CCNN2[i].GSDEP = 2000 + i * 10; CCNN2[i].GEDEP = 2000 + (i + 1) * 10; CCNN2[i].GRESULT = 1; int temp = pMemRdWt->WriteTable(itable1, i + 1, &CCNN2[i]); } //(2)其他表格 struct Slf_RST{ int Order; float Depth; float CorrDepth; }; struct Slf_RST m_Result; itable1 = pMemRdWt->OpenTable("ABCD"); if (itable1 < 0) { itable1 = pMemRdWt->Open_Set_Table("ABCD",0,3, "NO,DEPTH,DDEP", "4,4,4",//字段长度 "1,4,4",//字段类型 "0,0,0");//字段备注,1-枚举 } pMemRdWt->SetTableRecordCount(itable1,3); //设置表格有3行数据 for(int j = 0; j < 3; j++) { memset(&m_Result, 0, sizeof(Slf_RST)); m_Result.Order = j + 1; m_Result.Depth = 10; m_Result.CorrDepth = 20 + j; pMemRdWt->WriteTable(itable1, j + 1, &m_Result); } pMemRdWt->CloseTable(itable1); delete pMemRdWt; } // QString strMsg = ui->lineEdit->text(); //插件给平台发消息 emit sig_PluginMsg("插件给平台发了消息:" + strMsg); }