修改插件模块逻辑,模块中自定义生成QAction

平台获取模块中定义的QAction显示在ToolBar, 点击QAction, 加载插件插入到tab中
getPrjAllSlf封装到Slfio中,可以在插件模块中使用。
This commit is contained in:
DESKTOP-450PEFP\mainc 2026-03-23 10:40:57 +08:00
parent 2cc2765790
commit 5e750f0529
19 changed files with 814 additions and 154 deletions

View File

@ -79,5 +79,38 @@ void CallPlugin::setPluginParams(QString strPluginName, QString strParams)
{ {
return pluInter->setParams(strParams); return pluInter->setParams(strParams);
} }
} }
} }
QList<QAction *> CallPlugin::getPluginActionList(QWidget *parent)
{
QList<QAction *> ret;
foreach (HPLUGIN_INFO *pluItem, HPluginManage::getInstance()->getPluginList())
{
HPluginInterface *pluInter = reinterpret_cast<HPluginInterface *>(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<HPluginInterface *>(pluItem->pluClass);
if (pluItem->pluName == strPluginName)
{
QAction *pAct = pluInter->createAction(parent);
return pAct;
}
}
return nullptr;
}

View File

@ -25,6 +25,13 @@ public:
QString getPluginParams(QString strPluginName); QString getPluginParams(QString strPluginName);
void setPluginParams(QString strPluginName, QString strParams); void setPluginParams(QString strPluginName, QString strParams);
// 从插件模块中获取所有需要显示在平台的按钮
QList<QAction*> getPluginActionList(QWidget *parent = Q_NULLPTR);
//根据插件名称获取平台显示按钮
QAction *getPluginAction(QString strPluginName, QWidget *parent = Q_NULLPTR);
public: public:
Q_DISABLE_COPY(CallPlugin) Q_DISABLE_COPY(CallPlugin)
}; };

View File

@ -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();
}

View File

@ -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

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 B

View File

@ -0,0 +1,221 @@
#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);
}

View File

@ -0,0 +1,44 @@
#ifndef MYUNITUI_H
#define MYUNITUI_H
#include <QWidget>
#include <QMainWindow>
#include <QAction>
#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

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MyUnitUI</class>
<widget class="QWidget" name="MyUnitUI">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>367</width>
<height>331</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="styleSheet">
<string notr="true">QWidget#widget{
background-color: rgb(225, 170, 255);
}</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QWidget" name="widget" native="true">
<widget class="QWidget" name="verticalLayoutWidget">
<property name="geometry">
<rect>
<x>60</x>
<y>80</y>
<width>211</width>
<height>111</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>我是插件-直方图</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>发送消息</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,5 @@
<RCC>
<qresource prefix="/">
<file>image/zfu.png</file>
</qresource>
</RCC>

View File

@ -124,6 +124,9 @@ public:
CMemRdWt(); CMemRdWt();
CMemRdWt(const char *wellname,bool mconst=FALSE,int FileType=0); CMemRdWt(const char *wellname,bool mconst=FALSE,int FileType=0);
~CMemRdWt(); ~CMemRdWt();
static bool getPrjAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList);//直方图获取当前工程下的slf
void Initialize(bool mconst=FALSE); void Initialize(bool mconst=FALSE);
void BackData(); void BackData();
void RestoreData(); void RestoreData();

View File

@ -0,0 +1,30 @@
#ifndef COMMONUTILS_H
#define COMMONUTILS_H
#include <QString>
#include <QStatusBar>
#include <QComboBox>
#include <QUuid>
#include <QDir>
#include<cmath>
#pragma execution_character_set("utf-8")
class CCommonUtils
{
//函数定义
public:
//构造函数
CCommonUtils();
//析构函数
virtual ~CCommonUtils();
static bool getAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList);//直方图获取当前工程下的slf
static QString GetLogdataPath();
static int chakan(QString path, QStringList &wellfs, QString strSuffix);
private:
};
#endif // COMMONUTILS_H

View File

@ -52,11 +52,13 @@ HEADERS += \
../include/LogIO.h \ ../include/LogIO.h \
../include/MemRdWt.h \ ../include/MemRdWt.h \
../include/SlfioExport.h \ ../include/SlfioExport.h \
../include/commonutils.h \
../include/slf.h ../include/slf.h
SOURCES += \ SOURCES += \
CStringType.cpp \ CStringType.cpp \
LogIO.cpp \ LogIO.cpp \
commonutils.cpp \
memrdwt.cpp \ memrdwt.cpp \
slf.cpp slf.cpp

203
Slfio/src/commonutils.cpp Normal file
View File

@ -0,0 +1,203 @@
#include "commonutils.h"
#include "LogIO.h"
#include <QCoreApplication>
CCommonUtils::CCommonUtils()
{
}
CCommonUtils::~CCommonUtils()
{
}
bool CCommonUtils::getAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &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; i<list.size();i++)
{
QFileInfo file_info = list.at(i);
if(file_info.isDir())
{
//#JPH-307
QString absolute_file_path = file_info.absoluteFilePath();
if(absolute_file_path.at(absolute_file_path.length()-1)==' ') {
dir.rmdir(absolute_file_path);
continue;
}
listFolders.append(absolute_file_path);
}
}
}
QStringList wellfiles;
foreach(QString wellFolder, listFolders )
{
QFileInfo w(wellFolder);//#JPH-307
if(w.isDir())
{
chakan(wellFolder, wellfiles, "*.well");
}
}
QStringList wellNames;
foreach(QString wellFile1, wellfiles )
{
QString filename=wellFile1;
//----------------
CLogIO * logio=new CLogIO();
if(!logio->Open(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;
}

View File

@ -1,6 +1,8 @@
#include "MemRdWt.h" #include "MemRdWt.h"
#include "math.h" #include "math.h"
#include <QString> #include <QString>
#include "commonutils.h"
CMemRdWt ::CMemRdWt(const char *wellname,bool bconst,int FileType):CLogIO(wellname,FileType) CMemRdWt ::CMemRdWt(const char *wellname,bool bconst,int FileType):CLogIO(wellname,FileType)
{ {
Initialize(bconst); Initialize(bconst);
@ -409,8 +411,14 @@ QString getStrValue(char *stryy,int pos)//stryy 输入字符串缓冲器pos
CMemRdWt ::~CMemRdWt() CMemRdWt ::~CMemRdWt()
{ {
Close(); Close();
} }
bool CMemRdWt::getPrjAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList)
{
return CCommonUtils::getAllSlf(prjname, vecSlfList, vecWellList);
}
int CMemRdWt::GetInCurveName(int CurveNo,char *InName) int CMemRdWt::GetInCurveName(int CurveNo,char *InName)
{ {
if(!INC) return 0; if(!INC) return 0;

View File

@ -9,6 +9,7 @@
#include <QMessageBox> #include <QMessageBox>
#include <QPainter> #include <QPainter>
#include "LogIO.h" #include "LogIO.h"
#include "MemRdWt.h"
float mLineWidth=0.75; float mLineWidth=0.75;
QString OilField; QString OilField;
@ -700,157 +701,7 @@ bool SystemExiting(){return SystemIsExiting;}
//直方图获取当前工程下的slf //直方图获取当前工程下的slf
bool getAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList) bool getAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList)
{ {
//Logdata return CMemRdWt::getPrjAllSlf(prjname, vecSlfList, vecWellList);
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; i<list.size();i++)
{
QFileInfo file_info = list.at(i);
if(file_info.isDir())
{
//#JPH-307
QString absolute_file_path = file_info.absoluteFilePath();
if(absolute_file_path.at(absolute_file_path.length()-1)==' ') {
dir.rmdir(absolute_file_path);
continue;
}
listFolders.append(absolute_file_path);
}
}
}
QStringList wellfiles;
foreach(QString wellFolder, listFolders )
{
QFileInfo w(wellFolder);//#JPH-307
if(w.isDir())
{
chakan(wellFolder, wellfiles, "*.well");
}
}
QStringList wellNames;
foreach(QString wellFile1, wellfiles )
{
QString filename=wellFile1;
//----------------
CLogIO * logio=new CLogIO();
if(!logio->Open(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;
} }
int GetCurvInfo(QString strSlfName, QString strLineName, double &sdep, double &edep, double &rlev) int GetCurvInfo(QString strSlfName, QString strLineName, double &sdep, double &edep, double &rlev)

View File

@ -5,6 +5,7 @@
#include <QtCore/QString> #include <QtCore/QString>
#include <QtGui/QIcon> #include <QtGui/QIcon>
#include <QString> #include <QString>
#include <QAction>
#include "HPluginDefine.h" #include "HPluginDefine.h"
@ -20,6 +21,8 @@ public:
virtual QWidget *createWindow(QWidget *parent) const = 0; virtual QWidget *createWindow(QWidget *parent) const = 0;
virtual QString getParams() const = 0; virtual QString getParams() const = 0;
virtual void setParams(QString &strParams) = 0; virtual void setParams(QString &strParams) = 0;
virtual QAction *createAction(QWidget *parent) const = 0;
}; };
#define HPluginInterface_iid "org.qt-project.HPluginInterface" #define HPluginInterface_iid "org.qt-project.HPluginInterface"

View File

@ -71,9 +71,12 @@ MainWindow::MainWindow(QWidget *parent) :
initTitleBar(); //菜单栏 initTitleBar(); //菜单栏
initToolBar(); //工具栏 initToolBar(); //工具栏
initPluginTool(); //插件QAction
initProjectView(); //左侧-项目区 初始化在前 initProjectView(); //左侧-项目区 初始化在前
initWorkSpaceView(); //中间-工作区 初始化在后 initWorkSpaceView(); //中间-工作区 初始化在后
dockLayout(); dockLayout();
// //
this->setStatusBar(::GetStatusBar());//状态栏 this->setStatusBar(::GetStatusBar());//状态栏
@ -243,6 +246,17 @@ void MainWindow::initToolBar()
// connect(m_loadAc, &QAction::triggered, this, &MainWindow::s_DrawLine); // connect(m_loadAc, &QAction::triggered, this, &MainWindow::s_DrawLine);
} }
//初始化插件QAction
void MainWindow::initPluginTool()
{
QList<QAction *> listTool = CallPlugin::getInstance()->getPluginActionList(this);
foreach (QAction *pAct, listTool)
{
ui->mainToolBar->addAction(pAct);
connect(pAct, &QAction::triggered, this, &MainWindow::slot_PluginActionFunc);
}
}
//左侧 //左侧
void MainWindow::initProjectView() void MainWindow::initProjectView()
{ {
@ -367,6 +381,34 @@ void MainWindow::s_SaveProject()
// emit CallManage::getInstance()->sig_testPlugin("hello"); // emit CallManage::getInstance()->sig_testPlugin("hello");
} }
void MainWindow::slot_PluginActionFunc()
{
QAction* pAction = qobject_cast<QAction*>(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) void MainWindow::s_PluginMsg(QString msg)
{ {

View File

@ -65,6 +65,7 @@ public:
void initTitleBar(); //初始化菜单 void initTitleBar(); //初始化菜单
void initToolBar(); //初始化工具栏 void initToolBar(); //初始化工具栏
void initPluginTool(); //初始化插件QAction
void initProjectView(); //初始化左侧工程区 void initProjectView(); //初始化左侧工程区
void initWorkSpaceView(); //初始化工作区 void initWorkSpaceView(); //初始化工作区
void dockLayout(); //停靠 void dockLayout(); //停靠
@ -95,6 +96,8 @@ public slots:
void s_ShowWave(QString strSlfName, QString strName); //波列数据查看 void s_ShowWave(QString strSlfName, QString strName); //波列数据查看
void s_WelllogInformation(QString strSlfName);//编辑测井信息 void s_WelllogInformation(QString strSlfName);//编辑测井信息
void slot_PluginActionFunc();
//插件消息 //插件消息
void s_PluginMsg(QString msg); void s_PluginMsg(QString msg);