1. 查看波列数据逻辑, WellLogTableDialogNew界面不要重复打开多个界面

2.关闭WellLogTableDialogNew后清除共享内存HANDLE
3.解决查看波列数据引起的崩溃问题。
4.处理方法按钮点击后弹出处理方法对话框,关闭可视解释清除对应的资源
This commit is contained in:
DESKTOP-450PEFP\mainc 2026-06-12 11:28:32 +08:00
parent b16ac1f407
commit a15b26e3d8
16 changed files with 253 additions and 34 deletions

View File

@ -86,8 +86,8 @@ public:
void LoadFromTemplateFile();
pai::module::CModule* m_pModule;
private:
CBaseObject * m_SingleWellWindowDocument;
CBaseObject * m_MultiWellWindowDocument;
CBaseObject * m_SingleWellWindowDocument = nullptr;
CBaseObject * m_MultiWellWindowDocument = nullptr;
bool isSingleModuleMode;//true则是单方法模式false就是workflow模式
bool isDefineMothodMode;//true则是运行模式false就是定义合成方法模式
QString CurrentWellRoundPath;//当前井次

View File

@ -19,7 +19,12 @@ CObjWellLogWavefile::CObjWellLogWavefile()
CObjWellLogWavefile::~CObjWellLogWavefile()
{
if (!key.isEmpty() && IsMappingMem(key.toStdString().c_str())) {
CloseView(m_Handle, m_SharedMemory);
m_SharedMemory = NULL;
m_Handle = NULL;
key = "";
}
}
QUuid CObjWellLogWavefile::GetTypeID()const
{
@ -308,6 +313,7 @@ bool CObjWellLogWavefile::LoadFromSLF()
if(IsMappingMem(name.toStdString().c_str()))
{
CloseView(m_Handle, m_SharedMemory);
// GetObjectEvent().OnDeAttchData(m_SlfFileName,GetName());
}
m_SharedMemory=NULL;

View File

@ -137,6 +137,7 @@ public:
int m_ObjectType;
public:
bool isEqual(QString strOldPath, QString strOldName, int nObjectType);
void setName(QString strOldPath, QString strOldName, int nObjectType);
void setShowCurveName(QString strPath, QString strName, QMap<QString,QList<QString>> mapShowObject);
};

View File

@ -325,7 +325,7 @@ private:
bool m_switch;
int m_nVerScrollValue;
AssetCopy* m_pAssetCopy;
QMenu *m_menu;
QMenu *m_menu = nullptr;
bool canLoadFromSLF;
FLOATPROPERTY tempdata;

View File

@ -173,6 +173,18 @@ void WellLogTableDialogNew::slotImport()
TableFromCSVFile(m_pUI->tableWidget);
}
bool WellLogTableDialogNew::isEqual(QString strOldPath, QString strOldName, int nObjectType)
{
bool bret = false;
if (FileName == strOldPath
&& CurveName == strOldName
&& m_ObjectType == nObjectType)
{
bret = true;
}
return bret;
}
void WellLogTableDialogNew::setName(QString strOldPath, QString strOldName, int nObjectType)
{
FileName = strOldPath;
@ -619,7 +631,12 @@ void WellLogTableDialogNew::slotSave()
WellLogTableDialogNew::~WellLogTableDialogNew()
{
//luol 20200302
// m_gridData->deleteLater();
m_gridData->deleteLater();
for (int j = 0; j < m_pWellLogs.size(); j++)
{
m_pWellLogs.at(j)->deleteLater();
}
m_pWellLogs.clear();
// if(NULL != m_gridData)
// {
// delete m_gridData;

View File

@ -310,11 +310,11 @@ GridDataAdapter::~GridDataAdapter()
delete m_popTip;
m_popTip=NULL;
}
if(NULL != m_menu)
{
delete m_menu;
m_menu = NULL;
}
// if(NULL != m_menu)
// {
// delete m_menu;
// m_menu = NULL;
// }
if(!ifItemWidth){
delete []itemWidth;
itemWidth = NULL;

View File

@ -770,10 +770,10 @@ private:
QString GetFriendlyParamStringValue(const pai::module::CParameterItem *pParamItem) const;
private:
pai::workflow::CWorkFlowFile *m_pWorkflowFile; ///< 工作流文件
std::vector< pai::graphics2d::PaiModuleStyle* > *m_pModuleStyle; ///< 模块图形信息
std::vector< pai::graphics2d::PaiConnectionStyle* > *m_pConnectionStyle; ///< 关系图形信息
pai::objectmodel::PaiWorkflowSubmitter *m_pSubmitter; ///< 工作流提交器,用来提交工作流
pai::workflow::CWorkFlowFile *m_pWorkflowFile = nullptr; ///< 工作流文件
std::vector< pai::graphics2d::PaiModuleStyle* > *m_pModuleStyle = nullptr; ///< 模块图形信息
std::vector< pai::graphics2d::PaiConnectionStyle* > *m_pConnectionStyle = nullptr;///< 关系图形信息
pai::objectmodel::PaiWorkflowSubmitter *m_pSubmitter = nullptr; ///< 工作流提交器,用来提交工作流
QString m_MissingModules; ///< 丢失的模块信息
bool m_template; ///< 模板标记
bool m_CanSubmit; ///< 模块有错误时将该标记设为false

View File

@ -40,6 +40,7 @@ SOURCES += \
InterfaceWidget.cpp \
LogmudItemDrawer.cpp \
LogmudResultItem.cpp \
MyGraphicsView.cpp \
PickFrac.cpp \
PropertyWidget.cpp \
QCPSizeHandle.cpp \
@ -114,6 +115,7 @@ HEADERS += \
InterfaceWidget.h \
LogmudResultItem.h \
LogmuditemDrawer.h \
MyGraphicsView.h \
PickFrac.h \
PropertyWidget.h \
QCPSizeHandle.h \

View File

@ -11,6 +11,8 @@
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<QtMoc Include="MyGraphicsView.h" />
<QtMoc Include="SetPageMegDlg.h" />
<QtMoc Include="formwave.h" />
<QtMoc Include="formimage.h" />
<ClInclude Include="LogmuditemDrawer.h" />
@ -187,6 +189,7 @@
<ClCompile Include="mainwindowcurve.cpp" />
<ClCompile Include="mainwindowsplitter.cpp" />
<ClCompile Include="mycustomplot.cpp" />
<ClCompile Include="MyGraphicsView.cpp" />
<ClCompile Include="newheaddialog.cpp" />
<ClCompile Include="PickFrac.cpp" />
<ClCompile Include="preqtablewidget.cpp" />
@ -201,6 +204,7 @@
<ClCompile Include="qtprojectwidgets.cpp" />
<ClCompile Include="selectlinedialog.cpp" />
<ClCompile Include="selectwelldialog.cpp" />
<ClCompile Include="SetPageMegDlg.cpp" />
<ClCompile Include="totalTitleBar.cpp" />
<ClCompile Include="TransparentDraggableCorePhysics.cpp" />
<ClCompile Include="TransparentDraggableFac.cpp" />
@ -254,6 +258,7 @@
<QtUic Include="qtprojectwidgets.ui" />
<QtUic Include="selectlinedialog.ui" />
<QtUic Include="selectwelldialog.ui" />
<QtUic Include="SetPageMeg.ui" />
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{BE733E79-9D41-44C5-A0A3-048959EE70A0}</ProjectGuid>

View File

@ -325,6 +325,12 @@
<QtMoc Include="formimage.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="SetPageMegDlg.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="MyGraphicsView.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<ClCompile Include="backgrounddelegate.cpp">
@ -681,6 +687,12 @@
<ClCompile Include="formimage.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="SetPageMegDlg.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MyGraphicsView.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtRcc Include="logplus.qrc">
@ -760,5 +772,8 @@
<QtUic Include="formimage.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="SetPageMeg.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
</Project>

View File

@ -197,11 +197,15 @@ void MainWindow::ReadConfig()
}
else
{
if (iHeight < QApplication::desktop()->width())
{
iHeight = QApplication::desktop()->width();
}
if(iHeight < QApplication::desktop()->height())
{
//不能低于分辨率
iHeight = QApplication::desktop()->height();
}
}
}
g_iHeight_MyCustom = iHeight;
@ -455,6 +459,9 @@ bool MainWindow::closeProject()
for(int i=0; i<iCount; i++)
{
QWidget *selectWidget = m_centerWidgets->tabWidget(i);
if (!selectWidget)
continue;
QString objectName = selectWidget->objectName();
if(objectName == "MainWindowSplitter")
{
@ -868,13 +875,36 @@ void MainWindow::s_ShowWave(QString strSlfName, QString strName)
{
if(m_centerWidgets)
{
WellLogTableDialogNew* pDialog = new WellLogTableDialogNew();
pDialog->setName(strSlfName, strName, WAVE_OBJECT);
WellLogTableDialogNew* pDialog = nullptr;
for (int nIndex = m_pWellLogTableDialogNew.size() - 1; nIndex >= 0; nIndex--)
{
QPointer<WellLogTableDialogNew> pDlg = m_pWellLogTableDialogNew[nIndex];
if (pDlg.isNull())
{
m_pWellLogTableDialogNew.removeAt(nIndex);
continue;
}
bool equ = pDlg->isEqual(strSlfName, strName, WAVE_OBJECT);
if (equ)
{
pDialog = pDlg;
break;
}
}
if (!pDialog)
{
QPointer<WellLogTableDialogNew> pTmp = new WellLogTableDialogNew();
pTmp->setName(strSlfName, strName, WAVE_OBJECT);
m_pWellLogTableDialogNew.append(pTmp);
pDialog = pTmp;
}
QString wellname;QString path;
GetWellNameAndPath(strSlfName, wellname, path);
m_centerWidgets->addTab(pDialog, wellname + ":" + strName);
int iCount = m_centerWidgets->count();
m_centerWidgets->m_pTabBar->setCurrentIndex(iCount-1);
// int iCount = m_centerWidgets->count();
// m_centerWidgets->m_pTabBar->setCurrentIndex(iCount-1);
}
}
//编辑测井信息

View File

@ -7,6 +7,7 @@
#include <QPushButton>
#include <QKeyEvent>
#include <QStackedWidget>
#include <QPointer>
#include "qtprojectwidgets.h"
//#include "qtcenterwidgets.h"
@ -24,6 +25,7 @@ namespace Ui {
class MainWindow;
}
class WellLogTableDialogNew;
class MainWindow : public QMainWindow
{
Q_OBJECT
@ -50,6 +52,7 @@ public:
PropertyWidget *m_propertyWidget;//属性
ConsoleOutputWidget *m_consoleOutputWidget;//日志
QList<QPointer<WellLogTableDialogNew>> m_pWellLogTableDialogNew;
public:
virtual void closeEvent(QCloseEvent *event);
protected:

View File

@ -18,6 +18,7 @@
#include "mainwindow.h"
#include <QSvgGenerator>
#include "ItemBorderDelegate.h"
#include "MyGraphicsView.h"
#ifdef WIN32
#include "tiffio.h"
@ -426,6 +427,18 @@ void MainWindowCurve::SetNo()
}
MainWindowCurve::~MainWindowCurve()
{
if (m_pModuleDlg)
{
m_pModuleDlg->m_toolBar_plugin = nullptr;
m_pModuleDlg->close();
}
if (m_pModuleConsole)
{
m_pModuleConsole->g_mModuleParamers->deleteLater();
m_pModuleConsole->m_pWorkflowDataModel->deleteLater();
m_pModuleConsole->deleteLater();
}
if(m_SharedMemory.isAttached()){
int *isNo=(int*)m_SharedMemory.data();
m_SharedMemory.detach();
@ -3388,7 +3401,44 @@ void MainWindowCurve::s_ExecuteMerge()
void MainWindowCurve::s_ModuleOpen()
{
m_pParentWin->setModuleOpenOrClose();
QString strSlfName = "";
QString strLeft = m_leftWidgets->getLeftTreeString();
if (strLeft.length() > 0)
{
QStringList list = strLeft.split("#@@#");//QString字符串分割函数
if (list.size() > 3)
{
strSlfName = list[0];
QString strWellName = list[1];
}
}
if (strSlfName.isEmpty())
{
QMessageBox::information(nullptr, "提示", "请先选中待处理井次");
return;
}
if (m_pModuleConsole == nullptr)
{
CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole();
m_pModuleConsole = pModuleConsole;
pai::graphics::CModuleParamers* pDialog = new pai::graphics::CModuleParamers(pModuleConsole);//::CreatParamControlWidget();
m_pModuleDlg = pDialog;
pModuleConsole->g_mModuleParamers = pDialog;
pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel();
pDialog->m_CurrentSLFFileName = m_leftWidgets->m_strSlfName;
pDialog->m_toolBar_plugin = getPluginToolBar();
pDialog->m_mapAllSlfFile = m_leftWidgets->m_mapAllSlfFile;
pDialog->CreatParamControlWidget();
pDialog->setWindowTitle("处理方法");
}
if (m_pModuleDlg->isVisible())
m_pModuleDlg->close();
SetWorkflowConsole(m_pModuleConsole);
m_pModuleDlg->setFixedSize(600,800);
m_pModuleDlg->show();
//rotateCentralWidget90();
//m_pParentWin->setModuleOpenOrClose();
}
//缩放
@ -7070,3 +7120,79 @@ void MainWindowCurve::wheelEvent(QWheelEvent *e)
// 调用父类事件函数,保证鼠标滚轮查看文本功能正常
QMainWindow::wheelEvent(e);
}
void MainWindowCurve::rotateCentralWidget90() {
QWidget *oldCentral = takeCentralWidget();
QObject* obj = oldCentral->parent();
if (m_pGraphicsScene == NULL)
{
// 获取当前的centralWidget
QWidget *oldCentral = takeCentralWidget();
if (!oldCentral) return;
m_pTakeWidget = oldCentral;
QSize oldSize = oldCentral->size();
// 创建场景并将oldCentral嵌入
m_pGraphicsScene = new QGraphicsScene(this);
m_pGraphicsProxy = m_pGraphicsScene->addWidget(oldCentral);
m_pGraphicsProxy->setRotation(-90); // 旋转90度
// 创建QGraphicsView作为新的centralWidget
m_view = new MyGraphicsView(m_pGraphicsScene, this);
m_view->setGraphicsProxyWidget(m_pGraphicsProxy);
// 将view设置为主窗口的centralWidget
setCentralWidget(m_view);
m_pGraphicsScene->setSceneRect(0, 0, oldSize.width(), oldSize.height()-3);
// 将旋转原点设置为代理部件的中心点
m_pGraphicsProxy->setTransformOriginPoint(m_pGraphicsProxy->boundingRect().center());
QRect gt = oldCentral->geometry();
gt.setLeft(0);
gt.setTop(0);
gt.setWidth(oldSize.height());
gt.setHeight(oldSize.width());
oldCentral->setGeometry(gt);
QRectF sceneRect = m_pGraphicsProxy->sceneBoundingRect();
// 移动 proxy使得 sceneBoundingRect 的左上角位于 (0, 0)
m_pGraphicsProxy->setPos(m_pGraphicsProxy->pos() - sceneRect.topLeft());
m_bHVDisplay = true;
}
else
{
m_bHVDisplay = !m_bHVDisplay;
if (m_bHVDisplay)
{
int nrot = 0;
QRectF RTF = m_pGraphicsScene->sceneRect();
int nw = RTF.width();
int nh = RTF.height();
nrot = -90;
nw = RTF.height();
nh = RTF.width();
QRect gt = m_pTakeWidget->geometry();
gt.setWidth(nw);
gt.setHeight(nh);
m_pTakeWidget->setGeometry(gt);
m_pGraphicsProxy->setRotation(nrot); // 旋转90度
QRectF sceneRect = m_pGraphicsProxy->sceneBoundingRect();
// 移动 proxy使得 sceneBoundingRect 的左上角位于 (0, 0)
m_pGraphicsProxy->setPos(m_pGraphicsProxy->pos() - sceneRect.topLeft());
}
else
{
setCentralWidget(m_pTakeWidget);
m_pGraphicsScene->deleteLater();
m_pGraphicsScene = nullptr;
m_view->deleteLater();
m_view = nullptr;
}
}
}

View File

@ -7,6 +7,7 @@
#include "formmultiheads.h"
#include "qtprojectwidgets.h"
#include "CurveLine.h"
#include "LogModuleConsole.h"
#pragma execution_character_set("utf-8")
@ -22,6 +23,7 @@ struct SelectTableItem
QString m_strFormInfoType="";//类型curve, wave
};
class MainWindowSplitter;
class MyGraphicsView;
namespace Ui {
class MainWindowCurve;
@ -43,6 +45,8 @@ protected:
void resizeEvent(QResizeEvent *event);
void wheelEvent(QWheelEvent *e) override; //滚轮事件
void rotateCentralWidget90();
public:
void resizeItem(QString strWellName, double tempWidth, double tempHight);
void getTableSize_Head(int &iHight);
@ -117,6 +121,13 @@ public:
//预览图
bool g_bPreviewPrint = false;
int m_iTableSize_Head2 = 104;
QGraphicsScene *m_pGraphicsScene = NULL;
QGraphicsProxyWidget *m_pGraphicsProxy = NULL;
MyGraphicsView *m_view = NULL;
// 横竖显示,默认竖显示
bool m_bHVDisplay = false;
QWidget * m_pTakeWidget = NULL;
public:
//黑白图,针对共享内存,使用老版本代码,需要以下定义
//整图放大缩小比例
@ -268,6 +279,9 @@ public:
QAction* m_wellsSpaceAc = nullptr; //井间距
QAction* m_ModuleOpenAc = nullptr; //处理方法
CModuleConsole* m_pModuleConsole = nullptr; //CModuleConsole
CModuleParamers* m_pModuleDlg = nullptr;
public slots:
void s_NewWell(QString strWellName, QString strSlfName, bool bShowTrackHead = true);//新建井
void s_NewTrackChangeWidth(QString strWellName, double nW=0);//新建道后,改变井宽

View File

@ -1,7 +1,5 @@
#include "mainwindowsplitter.h"
#include "ui_mainwindowsplitter.h"
#include "LogModuleParamers.h"
#include "LogModuleConsole.h"
MainWindowSplitter::MainWindowSplitter(QWidget *parent) :
QMainWindow(parent),
@ -20,17 +18,17 @@ void MainWindowSplitter::setSplitterWidget(QtProjectWidgets *pWidgets)
m_mainWindowCurve = new MainWindowCurve(this);//中间工作区
// 左侧树
m_mainWindowCurve->m_leftWidgets = pWidgets;
m_PluginToolBar = m_mainWindowCurve->getPluginToolBar();
//m_PluginToolBar = m_mainWindowCurve->getPluginToolBar();
CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole();
CModuleParamers* pDialog = new CModuleParamers(pModuleConsole);//::CreatParamControlWidget();
SetWorkflowConsole(pModuleConsole);
pModuleConsole->g_mModuleParamers = pDialog;
pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel();
pDialog->m_CurrentSLFFileName = pWidgets->m_strSlfName;
pDialog->m_toolBar_plugin = m_PluginToolBar;
pDialog->m_mapAllSlfFile = pWidgets->m_mapAllSlfFile;
pDialog->CreatParamControlWidget();
//CModuleConsole* pModuleConsole = new pai::graphics::CModuleConsole();
//CModuleParamers* pDialog = new CModuleParamers(pModuleConsole);//::CreatParamControlWidget();
//SetWorkflowConsole(pModuleConsole);
//pModuleConsole->g_mModuleParamers = pDialog;
//pModuleConsole->m_pWorkflowDataModel = new CWellLogWorkflowDataModel();
//pDialog->m_CurrentSLFFileName = pWidgets->m_strSlfName;
//pDialog->m_toolBar_plugin = m_PluginToolBar;
// pDialog->m_mapAllSlfFile = pWidgets->m_mapAllSlfFile;
//pDialog->CreatParamControlWidget();
//QString subStr = strSlfName;
//int startPos = strSlfName.indexOf("Logdata");
@ -45,7 +43,7 @@ void MainWindowSplitter::setSplitterWidget(QtProjectWidgets *pWidgets)
m_pVSplitter = new QSplitter(Qt::Horizontal);
m_pVSplitter->addWidget(m_mainWindowCurve);
m_pVSplitter->addWidget(pDialog);
//m_pVSplitter->addWidget(pDialog);
setCentralWidget(m_pVSplitter);

View File

@ -5192,6 +5192,8 @@ void QMyCustomPlot::s_ReloadPlot(QString strUuid, QString strSlfName, QString st
{
return;
}
if (graph(0) == NULL)
return;
if(strLineName == "")
{
@ -11935,7 +11937,7 @@ void QMyCustomPlot::drawRose(bool bTableData, QString csCurveDDIR, QString csCur
float maxd=max(m_RightVal , m_LeftVal);
float dirmax,dipmax,dr;
float deps;
float ftmpSdep = 2890;//m_SDep;
float ftmpSdep = 500;//m_SDep;
float ftmpEdep = m_EDep;
if (m_bTableData)