From 5e750f0529d10928dc080d92e36788355ebabd0b Mon Sep 17 00:00:00 2001 From: "DESKTOP-450PEFP\\mainc" Date: Mon, 23 Mar 2026 10:40:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=92=E4=BB=B6=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E9=80=BB=E8=BE=91=EF=BC=8C=E6=A8=A1=E5=9D=97=E4=B8=AD?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=94=9F=E6=88=90QAction=20?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E8=8E=B7=E5=8F=96=E6=A8=A1=E5=9D=97=E4=B8=AD?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E7=9A=84QAction=E6=98=BE=E7=A4=BA=E5=9C=A8To?= =?UTF-8?q?olBar,=20=E7=82=B9=E5=87=BBQAction,=20=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=8F=92=E5=85=A5=E5=88=B0tab=E4=B8=AD=20get?= =?UTF-8?q?PrjAllSlf=E5=B0=81=E8=A3=85=E5=88=B0Slfio=E4=B8=AD=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=9C=A8=E6=8F=92=E4=BB=B6=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E4=B8=AD=E4=BD=BF=E7=94=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CallPlugin/CallPlugin.cpp | 37 +++++- CallPlugin/CallPlugin.h | 7 + Plugin/PluginUnit/PluginUnit.cpp | 59 +++++++++ Plugin/PluginUnit/PluginUnit.h | 31 +++++ Plugin/PluginUnit/PluginUnit.pro | 50 +++++++ Plugin/PluginUnit/image/zfu.png | Bin 0 -> 479 bytes Plugin/PluginUnit/myunitui.cpp | 221 +++++++++++++++++++++++++++++++ Plugin/PluginUnit/myunitui.h | 44 ++++++ Plugin/PluginUnit/myunitui.ui | 65 +++++++++ Plugin/PluginUnit/res.qrc | 5 + Slfio/include/MemRdWt.h | 3 + Slfio/include/commonutils.h | 30 +++++ Slfio/src/Slfio.pro | 2 + Slfio/src/commonutils.cpp | 203 ++++++++++++++++++++++++++++ Slfio/src/memrdwt.cpp | 10 +- common/geometryutils.cpp | 153 +-------------------- include/HPluginInterface.h | 3 + logPlus/mainwindow.cpp | 42 ++++++ logPlus/mainwindow.h | 3 + 19 files changed, 814 insertions(+), 154 deletions(-) create mode 100644 Plugin/PluginUnit/PluginUnit.cpp create mode 100644 Plugin/PluginUnit/PluginUnit.h create mode 100644 Plugin/PluginUnit/PluginUnit.pro create mode 100644 Plugin/PluginUnit/image/zfu.png create mode 100644 Plugin/PluginUnit/myunitui.cpp create mode 100644 Plugin/PluginUnit/myunitui.h create mode 100644 Plugin/PluginUnit/myunitui.ui create mode 100644 Plugin/PluginUnit/res.qrc create mode 100644 Slfio/include/commonutils.h create mode 100644 Slfio/src/commonutils.cpp diff --git a/CallPlugin/CallPlugin.cpp b/CallPlugin/CallPlugin.cpp index 7aa8b44..9e105c2 100644 --- a/CallPlugin/CallPlugin.cpp +++ b/CallPlugin/CallPlugin.cpp @@ -79,5 +79,38 @@ void CallPlugin::setPluginParams(QString strPluginName, QString strParams) { return pluInter->setParams(strParams); } - } -} \ No newline at end of file + } +} + +QList CallPlugin::getPluginActionList(QWidget *parent) +{ + QList ret; + foreach (HPLUGIN_INFO *pluItem, HPluginManage::getInstance()->getPluginList()) + { + HPluginInterface *pluInter = reinterpret_cast(pluItem->pluClass); + QWidget *pWidget = pluInter->createWindow(parent); + if(pWidget) + pWidget->hide(); + QAction *p = pluInter->createAction(parent); + if(p) + ret << p; + } + return ret; +} + +QAction *CallPlugin::getPluginAction(QString strPluginName, QWidget *parent) +{ + if (strPluginName == "") + return nullptr; + + foreach (HPLUGIN_INFO *pluItem, HPluginManage::getInstance()->getPluginList()) + { + HPluginInterface *pluInter = reinterpret_cast(pluItem->pluClass); + if (pluItem->pluName == strPluginName) + { + QAction *pAct = pluInter->createAction(parent); + return pAct; + } + } + return nullptr; +} diff --git a/CallPlugin/CallPlugin.h b/CallPlugin/CallPlugin.h index c6d19f8..2d4a9bf 100644 --- a/CallPlugin/CallPlugin.h +++ b/CallPlugin/CallPlugin.h @@ -25,6 +25,13 @@ public: QString getPluginParams(QString strPluginName); void setPluginParams(QString strPluginName, QString strParams); + // 从插件模块中获取所有需要显示在平台的按钮 + QList getPluginActionList(QWidget *parent = Q_NULLPTR); + + //根据插件名称获取平台显示按钮 + QAction *getPluginAction(QString strPluginName, QWidget *parent = Q_NULLPTR); + + public: Q_DISABLE_COPY(CallPlugin) }; diff --git a/Plugin/PluginUnit/PluginUnit.cpp b/Plugin/PluginUnit/PluginUnit.cpp new file mode 100644 index 0000000..5e9cfa9 --- /dev/null +++ b/Plugin/PluginUnit/PluginUnit.cpp @@ -0,0 +1,59 @@ +#include "PluginUnit.h" +#include "PluginName.h" + +#include "myunitui.h" +MyUnitUI *_window = nullptr; + +PluginUnit::PluginUnit(QObject *parent) : + QObject(parent) +{ + +} + +QString PluginUnit::getPluName() const +{ + QString pluName = tr(PLUGINUNIT); + return pluName; +} + +QIcon PluginUnit::icon() const +{ + return QIcon(":/logo.png"); +} + +int PluginUnit::windowType() const +{ + return 1; +} + +QWidget *PluginUnit::createWindow(QWidget *parent) const +{ + if (_window == nullptr) + { + _window = new MyUnitUI(parent); + } + return _window; +} + +QString PluginUnit::getParams() const +{ + if (_window != nullptr) + return _window->getParams(); + + return ""; +} + +void PluginUnit::setParams(QString &strParams) +{ + if (_window != nullptr) + return _window->setParams(strParams); +} + +QAction *PluginUnit::createAction(QWidget *parent) const +{ + if (_window == nullptr) + createWindow(parent); + + return _window->createAction(); +} + diff --git a/Plugin/PluginUnit/PluginUnit.h b/Plugin/PluginUnit/PluginUnit.h new file mode 100644 index 0000000..ef89101 --- /dev/null +++ b/Plugin/PluginUnit/PluginUnit.h @@ -0,0 +1,31 @@ +#ifndef PLUGINUNIT_H +#define PLUGINUNIT_H + +#include "HPluginInterface.h" + +class PluginUnit : public QObject, public HPluginInterface +{ + Q_OBJECT + + Q_INTERFACES(HPluginInterface) +#if QT_VERSION >= 0x050000 + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.HPluginInterface") +#endif // QT_VERSION >= 0x050000 + +public: + explicit PluginUnit(QObject *parent = 0); + + virtual QString getPluName() const; + virtual QIcon icon() const; + virtual int windowType() const; + virtual QWidget *createWindow(QWidget *parent) const; + virtual QString getParams() const; + virtual void setParams(QString &strParams); + + virtual QAction *createAction(QWidget *parent) const; + +signals: + +public slots: +}; +#endif // PLUGINUNIT_H diff --git a/Plugin/PluginUnit/PluginUnit.pro b/Plugin/PluginUnit/PluginUnit.pro new file mode 100644 index 0000000..cc08823 --- /dev/null +++ b/Plugin/PluginUnit/PluginUnit.pro @@ -0,0 +1,50 @@ +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +TEMPLATE = lib + +CONFIG += c++17 + +HEADERS = \ + PluginUnit.h \ + myunitui.h + +SOURCES = \ + PluginUnit.cpp \ + myunitui.cpp + + +FORMS += \ + myunitui.ui + + +INCLUDEPATH += $$PWD/../../include \ + $$PWD/../../HPluginManage \ + $$PWD/../../CallPlugin +INCLUDEPATH += $$PWD/../../Slfio/include + +# Default rules for deployment. +CONFIG(debug, debug|release){ + TARGET = PluginUnitd + DESTDIR = $$PWD/../../Bin/customPlugind + MOC_DIR = ../tmp/PluginUnitd + UI_DIR = ../tmp/PluginUnitd + OBJECTS_DIR = ../tmp/PluginUnitd + LIBS += -L$$PWD/../../Bin/ -lCallPlugind -lHPluginManaged -lslfiod +} else { + TARGET = PluginUnit + DESTDIR = $$PWD/../../Bin/customPlugin + MOC_DIR = ../tmp/PluginUnit + UI_DIR = ../tmp/PluginUnit + OBJECTS_DIR = ../tmp/PluginUnit + LIBS += -L$$PWD/../../Bin/ -lCallPlugin -lHPluginManage -lslfio +} + +RESOURCES += \ + res.qrc diff --git a/Plugin/PluginUnit/image/zfu.png b/Plugin/PluginUnit/image/zfu.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3c31f4d7f0811e461b5c9821425f339bdd6fd0 GIT binary patch literal 479 zcmV<50U-W~P)OXCs~hbNy7CMzdjz}D zr9FXo02hUByn?%W1G93W(k`r2p`wz0*bgHUV~DneDU>FQ`N3mChR6KEyv)EOwrwM9 z5FDKCGbj71coP;k8Nj*woDbN=Lkfw#(M0yRt{8ZLd{$Qn5&eiDPG35k5n>Ajnabutl2h<^5ND+Jus;$w>i7X7bYcY ziWecpi;&_)Nbw@1co9;(u>KUgY*~-$r$43ibt(FhUZNBl3yI?WReR`ksl}#uhA(@B z0+Ip{1?Wji`>q|kcXA_Ef-Zl?ojfWz`HjaFlTGP%U*8Q{DJ8)wP;cG7f_y!Xv VV0q6iZ^Zxr002ovPDHLkV1oNb)A#@Y literal 0 HcmV?d00001 diff --git a/Plugin/PluginUnit/myunitui.cpp b/Plugin/PluginUnit/myunitui.cpp new file mode 100644 index 0000000..571240f --- /dev/null +++ b/Plugin/PluginUnit/myunitui.cpp @@ -0,0 +1,221 @@ +#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(); + 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 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); +} diff --git a/Plugin/PluginUnit/myunitui.h b/Plugin/PluginUnit/myunitui.h new file mode 100644 index 0000000..8c018ea --- /dev/null +++ b/Plugin/PluginUnit/myunitui.h @@ -0,0 +1,44 @@ +#ifndef MYUNITUI_H +#define MYUNITUI_H + +#include +#include +#include + +#pragma execution_character_set("utf-8") + +namespace Ui { +class MyUnitUI; +} + +class MyUnitUI : public QWidget +{ + Q_OBJECT + +public: + explicit MyUnitUI(QWidget *parent = nullptr); + ~MyUnitUI(); + +private: + Ui::MyUnitUI *ui; + QAction* m_pAction = nullptr; + QString m_strPrjName = ""; + +public: + QString getParams(); + void setParams(QString &strParams); + + // 创建在平台显示的QAction按钮 + QAction *createAction(); + +public: + QMainWindow *m_mainParentWindow; + +signals: + void sig_PluginMsg(QString msg); + +public slots: + void s_ButtonClick(); +}; + +#endif // MYUNITUI_H diff --git a/Plugin/PluginUnit/myunitui.ui b/Plugin/PluginUnit/myunitui.ui new file mode 100644 index 0000000..2456ddd --- /dev/null +++ b/Plugin/PluginUnit/myunitui.ui @@ -0,0 +1,65 @@ + + + MyUnitUI + + + + 0 + 0 + 367 + 331 + + + + Form + + + QWidget#widget{ +background-color: rgb(225, 170, 255); +} + + + + + + + + 60 + 80 + 211 + 111 + + + + + + + + + + 我是插件-直方图 + + + Qt::AlignCenter + + + + + + + + + + 发送消息 + + + + + + + + + + + + diff --git a/Plugin/PluginUnit/res.qrc b/Plugin/PluginUnit/res.qrc new file mode 100644 index 0000000..a4445e2 --- /dev/null +++ b/Plugin/PluginUnit/res.qrc @@ -0,0 +1,5 @@ + + + image/zfu.png + + diff --git a/Slfio/include/MemRdWt.h b/Slfio/include/MemRdWt.h index fc0cb52..fbd4d74 100644 --- a/Slfio/include/MemRdWt.h +++ b/Slfio/include/MemRdWt.h @@ -124,6 +124,9 @@ public: CMemRdWt(); CMemRdWt(const char *wellname,bool mconst=FALSE,int FileType=0); ~CMemRdWt(); + + static bool getPrjAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList);//直方图,获取当前工程下的slf + void Initialize(bool mconst=FALSE); void BackData(); void RestoreData(); diff --git a/Slfio/include/commonutils.h b/Slfio/include/commonutils.h new file mode 100644 index 0000000..0a75961 --- /dev/null +++ b/Slfio/include/commonutils.h @@ -0,0 +1,30 @@ +#ifndef COMMONUTILS_H +#define COMMONUTILS_H + +#include +#include +#include +#include +#include +#include + +#pragma execution_character_set("utf-8") + +class CCommonUtils +{ + //函数定义 +public: + //构造函数 + CCommonUtils(); + //析构函数 + virtual ~CCommonUtils(); + + static bool getAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList);//直方图,获取当前工程下的slf + static QString GetLogdataPath(); + static int chakan(QString path, QStringList &wellfs, QString strSuffix); + +private: + +}; + +#endif // COMMONUTILS_H diff --git a/Slfio/src/Slfio.pro b/Slfio/src/Slfio.pro index 83262ad..9c2d37d 100644 --- a/Slfio/src/Slfio.pro +++ b/Slfio/src/Slfio.pro @@ -52,11 +52,13 @@ HEADERS += \ ../include/LogIO.h \ ../include/MemRdWt.h \ ../include/SlfioExport.h \ + ../include/commonutils.h \ ../include/slf.h SOURCES += \ CStringType.cpp \ LogIO.cpp \ + commonutils.cpp \ memrdwt.cpp \ slf.cpp diff --git a/Slfio/src/commonutils.cpp b/Slfio/src/commonutils.cpp new file mode 100644 index 0000000..e7f9993 --- /dev/null +++ b/Slfio/src/commonutils.cpp @@ -0,0 +1,203 @@ +#include "commonutils.h" +#include "LogIO.h" +#include + +CCommonUtils::CCommonUtils() +{ + +} + +CCommonUtils::~CCommonUtils() +{ + +} + +bool CCommonUtils::getAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList) +{ + //Logdata + QString folderPath; + folderPath = GetLogdataPath(); + folderPath = folderPath + prjname; + folderPath = folderPath + "/"; + + //------------------- + QStringList listFolders; + QFileInfo mfi(folderPath); + if(!mfi.isDir()) + { + //井文件 *.wwl + if(!mfi.isFile()) + { + return false; + } + //listFiles.append(folderPath); + } + else + { + //井目录 + //取当前当前目录内容 + QDir dir(folderPath); + dir.setFilter(QDir::Dirs |QDir::NoDotAndDotDot |QDir::Files | QDir::NoSymLinks); + QFileInfoList list = dir.entryInfoList(); + int file_count = list.count(); + if(file_count <= 0)//判断目录是否为空,空目录返回 + { + return false; + } + //取当前目录内容,符合后缀文件 + QStringList string_list; + for(int i=0; iOpen(filename.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logio; + QString aa=filename+"文件打开失败,请检查!"; + //qDebug() << aa; + //AppendConsole(pai::log::PAI_ERROR,aa); + continue; + } + // + QString wellname=""; + Slf_FILE_MESSAGE mssage; + logio->GetFileMessage(mssage); + wellname=mssage.WellName; + wellname=wellname.toUpper(); + if (wellname.isEmpty()||wellname.length()>64||wellname.indexOf('&')>-1) + { + //辨别井名是否有效,无效则采用文件名 + QFileInfo fileInfo(filename); + QString strWellName = fileInfo.completeBaseName(); + strWellName=strWellName.toUpper(); + // + wellname=strWellName.toStdString().c_str(); + int len=strlen(strWellName.toStdString().c_str()); + if(len>sizeof(mssage.WellName)) len=sizeof(mssage.WellName); + strncpy(mssage.WellName,strWellName.toStdString().c_str(),len); + mssage.WellName[len]=0; + logio->SetFileMessage(mssage); + } + wellname=wellname.toUpper(); + + //查找是否已经存在该井和井次 + if(wellNames.contains(wellname)) + { + delete logio; + continue; + } + wellNames.append(wellname); + // + vecWellList.append(wellname); + + //加载*.slf + QStringList slffiles; + QString pathTmp=GetLogdataPath(); + pathTmp+=prjname+"/#"+wellname; + chakan(pathTmp, slffiles, "*.slf"); + foreach(QString slfFile1, slffiles ) + { + CLogIO * logioSLf=new CLogIO(); + if(!logioSLf->Open(slfFile1.toStdString().c_str(),CSlfIO::modeRead)) + { + delete logioSLf; + //QString aa=fileFull+"文件打开失败,请检查!"; + //qDebug() << aa; + //AppendConsole(pai::log::PAI_ERROR,aa); + continue; + } + else + { + Slf_FILE_MESSAGE mssageSlf; + logioSLf->GetFileMessage(mssageSlf); + + if(wellname != QString(mssageSlf.WellName)) + { + delete logioSLf; + continue; + } + QString wellnameSLf=mssageSlf.Item; + if (wellnameSLf.isEmpty()||wellnameSLf.length()>64||wellnameSLf.indexOf('&')>-1) + { + QFileInfo fileinfo; + fileinfo = QFileInfo(slfFile1); + wellnameSLf = fileinfo.completeBaseName(); + } + if(wellnameSLf != wellname) + { + //井次名称不一致 + //qDebug() << "井次名称不一致"; + delete logioSLf; + continue; + } + + vecSlfList.append(slfFile1); + delete logioSLf; + } + } + } + + return true; +} + +QString CCommonUtils::GetLogdataPath() +{ + // 1.获取当前运行程序的目录路径 + QString applicationDirPath = QCoreApplication::applicationDirPath(); + //获取上级目录 + int index = applicationDirPath.lastIndexOf("/"); + int index1 = applicationDirPath.lastIndexOf("\\"); + if(index1 > index) + { + index = index1; + } + // + QString strImagePath; + strImagePath = applicationDirPath.mid(0,index+1) + "Logdata/"; + // + QDir dir(strImagePath); + if( !dir.exists( strImagePath ) ) + { + dir.mkdir(strImagePath); + } + + return strImagePath; +} + +int CCommonUtils::chakan(QString path, QStringList &wellfs, QString strSuffix) +{ + QDir dir(path); + QFileInfoList fileInfos = dir.entryInfoList(QStringList() << strSuffix, QDir::Files); + foreach(QFileInfo fileInfo, fileInfos) + { + wellfs.append(fileInfo.absoluteFilePath()); + } + return 1; +} diff --git a/Slfio/src/memrdwt.cpp b/Slfio/src/memrdwt.cpp index e3576b7..a6516af 100644 --- a/Slfio/src/memrdwt.cpp +++ b/Slfio/src/memrdwt.cpp @@ -1,6 +1,8 @@ #include "MemRdWt.h" #include "math.h" #include +#include "commonutils.h" + CMemRdWt ::CMemRdWt(const char *wellname,bool bconst,int FileType):CLogIO(wellname,FileType) { Initialize(bconst); @@ -409,8 +411,14 @@ QString getStrValue(char *stryy,int pos)//stryy 输入字符串缓冲器,pos CMemRdWt ::~CMemRdWt() { - Close(); + Close(); } + +bool CMemRdWt::getPrjAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList) +{ + return CCommonUtils::getAllSlf(prjname, vecSlfList, vecWellList); +} + int CMemRdWt::GetInCurveName(int CurveNo,char *InName) { if(!INC) return 0; diff --git a/common/geometryutils.cpp b/common/geometryutils.cpp index 50c7b1c..8ab20fd 100644 --- a/common/geometryutils.cpp +++ b/common/geometryutils.cpp @@ -9,6 +9,7 @@ #include #include #include "LogIO.h" +#include "MemRdWt.h" float mLineWidth=0.75; QString OilField; @@ -700,157 +701,7 @@ bool SystemExiting(){return SystemIsExiting;} //直方图,获取当前工程下的slf bool getAllSlf(QString prjname, QVector &vecSlfList, QVector &vecWellList) { - //Logdata - QString folderPath; - folderPath = GetLogdataPath(); - folderPath = folderPath + prjname; - folderPath = folderPath + "/"; - - //------------------- - QStringList listFolders; - QFileInfo mfi(folderPath); - if(!mfi.isDir()) - { - //井文件 *.wwl - if(!mfi.isFile()) - { - return false; - } - //listFiles.append(folderPath); - } - else - { - //井目录 - //取当前当前目录内容 - QDir dir(folderPath); - dir.setFilter(QDir::Dirs |QDir::NoDotAndDotDot |QDir::Files | QDir::NoSymLinks); - QFileInfoList list = dir.entryInfoList(); - int file_count = list.count(); - if(file_count <= 0)//判断目录是否为空,空目录返回 - { - return false; - } - //取当前目录内容,符合后缀文件 - QStringList string_list; - for(int i=0; iOpen(filename.toStdString().c_str(),CSlfIO::modeRead)) - { - delete logio; - QString aa=filename+"文件打开失败,请检查!"; - //qDebug() << aa; - //AppendConsole(pai::log::PAI_ERROR,aa); - continue; - } - // - QString wellname=""; - Slf_FILE_MESSAGE mssage; - logio->GetFileMessage(mssage); - wellname=mssage.WellName; - wellname=wellname.toUpper(); - if (wellname.isEmpty()||wellname.length()>64||wellname.indexOf('&')>-1) - { - //辨别井名是否有效,无效则采用文件名 - QFileInfo fileInfo(filename); - QString strWellName = fileInfo.completeBaseName(); - strWellName=strWellName.toUpper(); - // - wellname=strWellName.toStdString().c_str(); - int len=strlen(strWellName.toStdString().c_str()); - if(len>sizeof(mssage.WellName)) len=sizeof(mssage.WellName); - strncpy(mssage.WellName,strWellName.toStdString().c_str(),len); - mssage.WellName[len]=0; - logio->SetFileMessage(mssage); - } - wellname=wellname.toUpper(); - - //查找是否已经存在该井和井次 - if(wellNames.contains(wellname)) - { - delete logio; - continue; - } - wellNames.append(wellname); - // - vecWellList.append(wellname); - - //加载*.slf - QStringList slffiles; - QString pathTmp=GetLogdataPath(); - pathTmp+=prjname+"/#"+wellname; - chakan(pathTmp, slffiles, "*.slf"); - foreach(QString slfFile1, slffiles ) - { - CLogIO * logioSLf=new CLogIO(); - if(!logioSLf->Open(slfFile1.toStdString().c_str(),CSlfIO::modeRead)) - { - delete logioSLf; - //QString aa=fileFull+"文件打开失败,请检查!"; - //qDebug() << aa; - //AppendConsole(pai::log::PAI_ERROR,aa); - continue; - } - else - { - Slf_FILE_MESSAGE mssageSlf; - logioSLf->GetFileMessage(mssageSlf); - - if(wellname != QString(mssageSlf.WellName)) - { - delete logioSLf; - continue; - } - QString wellnameSLf=mssageSlf.Item; - if (wellnameSLf.isEmpty()||wellnameSLf.length()>64||wellnameSLf.indexOf('&')>-1) - { - QFileInfo fileinfo; - fileinfo = QFileInfo(slfFile1); - wellnameSLf = fileinfo.completeBaseName(); - } - if(wellnameSLf != wellname) - { - //井次名称不一致 - //qDebug() << "井次名称不一致"; - delete logioSLf; - continue; - } - - vecSlfList.append(slfFile1); - delete logioSLf; - } - } - } - - return true; + return CMemRdWt::getPrjAllSlf(prjname, vecSlfList, vecWellList); } int GetCurvInfo(QString strSlfName, QString strLineName, double &sdep, double &edep, double &rlev) diff --git a/include/HPluginInterface.h b/include/HPluginInterface.h index 9ede14b..2e6e4ce 100644 --- a/include/HPluginInterface.h +++ b/include/HPluginInterface.h @@ -5,6 +5,7 @@ #include #include #include +#include #include "HPluginDefine.h" @@ -20,6 +21,8 @@ public: virtual QWidget *createWindow(QWidget *parent) const = 0; virtual QString getParams() const = 0; virtual void setParams(QString &strParams) = 0; + + virtual QAction *createAction(QWidget *parent) const = 0; }; #define HPluginInterface_iid "org.qt-project.HPluginInterface" diff --git a/logPlus/mainwindow.cpp b/logPlus/mainwindow.cpp index 1fb72f5..a89b292 100644 --- a/logPlus/mainwindow.cpp +++ b/logPlus/mainwindow.cpp @@ -71,9 +71,12 @@ MainWindow::MainWindow(QWidget *parent) : initTitleBar(); //菜单栏 initToolBar(); //工具栏 + initPluginTool(); //插件QAction + initProjectView(); //左侧-项目区 初始化在前 initWorkSpaceView(); //中间-工作区 初始化在后 dockLayout(); + // this->setStatusBar(::GetStatusBar());//状态栏 @@ -243,6 +246,17 @@ void MainWindow::initToolBar() // connect(m_loadAc, &QAction::triggered, this, &MainWindow::s_DrawLine); } +//初始化插件QAction +void MainWindow::initPluginTool() +{ + QList listTool = CallPlugin::getInstance()->getPluginActionList(this); + foreach (QAction *pAct, listTool) + { + ui->mainToolBar->addAction(pAct); + connect(pAct, &QAction::triggered, this, &MainWindow::slot_PluginActionFunc); + } +} + //左侧 void MainWindow::initProjectView() { @@ -367,6 +381,34 @@ void MainWindow::s_SaveProject() // emit CallManage::getInstance()->sig_testPlugin("hello"); } +void MainWindow::slot_PluginActionFunc() +{ + QAction* pAction = qobject_cast(sender()); + if(pAction == nullptr) + return; + + if (g_prjname == "") + { + QMessageBox::information(nullptr, "提示", "请先打开项目!"); + return; + } + + QString strPluginName = pAction->property("PluginName").toString(); + QWidget * pMyWidget = CallPlugin::getInstance()->getPluginWidget(strPluginName, (QWidget *)this); + if (pMyWidget != nullptr) + { + QJsonObject rootObject; + rootObject.insert("prjname", g_prjname); + //---------------------- + QJsonDocument doc; + doc.setObject(rootObject); + + CallPlugin::getInstance()->setPluginParams(strPluginName, doc.toJson(QJsonDocument::Compact)); + m_centerWidgets->addTab(pMyWidget, pAction->text()); + + } +} + //收到插件消息 void MainWindow::s_PluginMsg(QString msg) { diff --git a/logPlus/mainwindow.h b/logPlus/mainwindow.h index c6cd9ae..5a36106 100644 --- a/logPlus/mainwindow.h +++ b/logPlus/mainwindow.h @@ -65,6 +65,7 @@ public: void initTitleBar(); //初始化菜单 void initToolBar(); //初始化工具栏 + void initPluginTool(); //初始化插件QAction void initProjectView(); //初始化左侧工程区 void initWorkSpaceView(); //初始化工作区 void dockLayout(); //停靠 @@ -95,6 +96,8 @@ public slots: void s_ShowWave(QString strSlfName, QString strName); //波列数据查看 void s_WelllogInformation(QString strSlfName);//编辑测井信息 + void slot_PluginActionFunc(); + //插件消息 void s_PluginMsg(QString msg);