平台获取模块中定义的QAction显示在ToolBar, 点击QAction, 加载插件插入到tab中 getPrjAllSlf封装到Slfio中,可以在插件模块中使用。
222 lines
7.2 KiB
C++
222 lines
7.2 KiB
C++
#include "myunitui.h"
|
||
#include "ui_myunitui.h"
|
||
#include "PluginName.h"
|
||
#include "MemRdWt.h"
|
||
#include <QJsonDocument>
|
||
#include <QJsonObject>
|
||
|
||
//固井结构体(注:此处为表格输出示例)
|
||
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();
|
||
m_pAction->setText("直方图");
|
||
m_pAction->setToolTip("直方图");
|
||
m_pAction->setIcon( QIcon(":/image/zfu.png"));
|
||
m_pAction->setProperty("PluginName", PLUGINUNIT);
|
||
|
||
return m_pAction;
|
||
}
|
||
|
||
//测试按钮
|
||
void MyUnitUI::s_ButtonClick()
|
||
{
|
||
QVector<QString> vecSlfList;
|
||
QVector<QString> 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);
|
||
}
|