// #include #include "../include/griddataadapter.h" #include "WellLogTableDialogNew.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "TipPop.h" // #include "ObjProject.h" // #include "DataTree.h" // #include // #include "ObjWellLogWavefile.h" #include "DataManagger.h" #include "assetcopy.h" // #include // #include #include "ObjectID.h" //QtConcurrent #define FLOATPREC 4 Slf_WAVE WaveInfo; Slf_TDT TDT; Slf_FMT FMT; //定义表格的行高 //#define DefRowHeight 25 //列宽 //#define DefColWidth 100 //表格显示小数点后位数f #define DECIMALPLACESNUM 8 #define DefSelection_Color "lightblue" #define DefBgSelection_Color "lightgray" #define CurveViewVerRange 200 WellLogHeaderView::WellLogHeaderView(Qt::Orientation orientation, QWidget *parent ): QHeaderView(orientation,parent) { m_logicalIndex=-1; } WellLogHeaderView::~WellLogHeaderView() { } void WellLogHeaderView::mouseReleaseEvent(QMouseEvent *evt) { QHeaderView::mouseReleaseEvent(evt); QPoint point=evt->pos(); m_logicalIndex=QHeaderView::logicalIndexAt(point); //this->update(); emit signalClickedSectionLogicalIndex(m_logicalIndex); } void WellLogHeaderView::paintEvent(QPaintEvent *pevt) { QHeaderView::paintEvent(pevt); QPainter painter; painter.begin(this); painter.save(); QPen pen=QPen(QColor(213,239,255),1); painter.setPen(pen); //painter.setBrush(); QRect bgRect=rect(); painter.drawRect(bgRect); painter.restore(); painter.end(); } void WellLogHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const { QVariant value=model()->headerData(logicalIndex,Qt::Horizontal,Qt::DisplayRole); QModelIndex mindex= model()->index(0,0); painter->save(); QHeaderView::paintSection(painter,rect,logicalIndex); painter->restore(); QBrush bgBrush=QColor(qRgb(231,231,231)); if(logicalIndex == m_logicalIndex && logicalIndex >0 ) { bgBrush=QColor(qRgb(213,213,213)); } painter->save(); painter->fillRect(rect,bgBrush); painter->restore(); if(value.isValid()) { painter->drawText(rect,Qt::AlignHCenter|Qt::AlignVCenter,value.value()); } } //void WellLogHeaderView::setSelectionChecked(const QModelIndex &index) //{ // QRect selectionRect=QHeaderView::visualRect(index); // setSelection(selectionRect,QItemSelectionModel::ToggleCurrent); // //} GridDataAdapter::GridDataAdapter(QTableWidget* table, QScrollBar *horizontalScrollBar, QScrollBar *verticalScrollBar, QObject* parent) : QObject(parent) ,m_verScrolValue(0) ,m_horScrolValue(0) ,m_pageRow(1) ,m_pageCol(0) ,m_tmodel(NULL) // ,m_pWell(NULL) ,m_mgr(NULL) ,ifItemWidth(true) ,m_nVerScrollValue(0) ,m_pAssetCopy(new AssetCopy(this)) ,DefRowHeight(20) ,DefColWidth(180) ,canLoadFromSLF(true) ,haveDoubleClicked(false) ,VerScrollUp(false) ,VerScrollChanged(true) { initColWH(); qRegisterMetaType("DataPair"); resetEditRange(); m_horScrolBar=horizontalScrollBar; m_verScrolBar=verticalScrollBar; m_table=table; m_table->installEventFilter(this); connect(m_verScrolBar,SIGNAL(valueChanged(int)),this,SLOT(slotVerScrollValueChange(int))); connect(m_horScrolBar,SIGNAL(valueChanged(int)),this,SLOT(slotHorScrollValueChange(int))); connect(m_verScrolBar,SIGNAL(sliderPressed()),this,SLOT(slotVerScrollBarPressed())); connect(m_verScrolBar,SIGNAL(sliderReleased()),this,SLOT(slotVerScrollBarReleased())); connect(m_horScrolBar,SIGNAL(sliderPressed()),this,SLOT(slotHorScrollBarPressed())); connect(m_horScrolBar,SIGNAL(sliderReleased()),this,SLOT(slotHorScrollBarReleased())); m_table->verticalScrollBar()->setVisible(true); m_table->horizontalScrollBar()->setVisible(true); m_table->horizontalHeader()->setSortIndicatorShown(false); m_table->setGridStyle(Qt::PenStyle::SolidLine); m_table->setHorizontalHeader(new WellLogHeaderView(Qt::Horizontal, m_table)); m_dtype = D_NONE; m_tmodel = new TableModel(); if(NULL == m_mgr) { m_mgr = new CDataManagger(); } vP = NULL; m_dataRowCount = 0; m_dataColCount = 0; recordcount = 0; m_switch = false; m_table->setMouseTracking(true); m_table->horizontalHeader()->setMouseTracking(true); WellLogHeaderView *wellHeader=dynamic_cast( m_table->horizontalHeader()); connect(wellHeader, SIGNAL(signalClickedSectionLogicalIndex(int)), this, SLOT(slotSectionClicked(int))); connect(&watcher, SIGNAL(finished()), this, SLOT(slotScrollChangeComplete())); connect(m_table, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(slotCellDoubleClicked(int, int))); connect(m_table, SIGNAL(cellClicked(int, int)), this, SLOT(slotCellClicked(int, int))); connect(m_table, SIGNAL(cellChanged(int,int)), this, SLOT(itemChange_SLOT(int, int))); connect(this, SIGNAL(signalCommitToSave()), this, SLOT(slotCommitToSave())); hideWellLogView(); m_popTip = new TipPop(); m_menu = new QMenu(m_table); } void GridDataAdapter::slotSectionClicked(int logincIndex) { if(logincIndex==0) { return; } m_table->horizontalHeader()->setFocus(); bindWellLogData(logincIndex-1); } void GridDataAdapter::slotCellDoubleClicked(int row,int col) { if(NULL == m_table) return; QTableWidgetItem* item = m_table->item(row,col); if(NULL == item) return; haveDoubleClicked = true; m_cellText = item->text(); m_editRange = QTableWidgetSelectionRange(row,col,row,col); } void GridDataAdapter::slotCellClicked(int row,int col) { if(NULL == m_table) return; QTableWidgetItem* itemDepth = m_table->item(row,0); QTableWidgetItem* itemValue = m_table->item(row,1); if(NULL == itemDepth || NULL == itemValue) return; QString m_depthText = itemDepth->text(); QString m_valueText = itemValue->text(); float m_depthV = m_depthText.toFloat(); float m_valueV = m_valueText.toFloat(); switch(m_dtype) { case D_WellData: break; case D_WellLogData: //常规 { // QWidget* parent=qobject_cast(m_table->parent()); // QWidget* pvPage=parent->findChild("curvePreViewPage"); // int value = (m_EDep-m_depthV)*100/(m_EDep-m_SDep)+1; // if(value >= 0 && value <= 100 && pvPage != NULL) // m_mgr->CallDisplayCurveVerChange(0,fileName,curveName,pvPage,value,m_depthV); } break; case D_MultWellLogData: break; case D_TDTWellLogData: haveDoubleClicked = false; break; case D_FMTWellLogData: haveDoubleClicked = false; break; case D_TableWellLogData: { haveDoubleClicked = false; } default: break; } } void GridDataAdapter::itemChange_SLOT(int rowP, int colP) { if(haveDoubleClicked) { refreshTempModel(); haveDoubleClicked = false; } } void GridDataAdapter::resetEditRange() { m_editRange=QTableWidgetSelectionRange(-1,-1,-1,-1); } GridDataAdapter::~GridDataAdapter() { for(int i = 0; i < m_pWellLogs.size(); i++){ m_pWellLogs[i]->isUsing = false; } qDeleteAll(m_pageItems); clearBuffer(); //delete m_pAssetCopy; delete m_tmodel; m_tmodel=NULL; m_table=NULL; if(NULL != vP) { delete vP; vP=NULL; } if(NULL != m_mgr) { delete m_mgr; m_mgr=NULL; } if(NULL != m_popTip) { delete m_popTip; m_popTip=NULL; } if(NULL != m_menu) { delete m_menu; m_menu = NULL; } if(!ifItemWidth){ delete []itemWidth; itemWidth = NULL; } } int GridDataAdapter::dataRowCount() { return m_dataRowCount; } int GridDataAdapter::dataColCount() { return m_dataColCount; } void GridDataAdapter::setModelData(const QList< QList >& model ) { m_tmodel->setModelData(model); } void GridDataAdapter::setTableHeaderData(const QStringList &headerLst) { m_tmodel->setTableHeaderData(headerLst); } //清空 void GridDataAdapter::clearBuffer() { m_tmodel->clearBuffer(); } void GridDataAdapter::initColWH() { int nScreenW = 2560;//GetSystemMetrics(SM_CXSCREEN);//2560;// int nScreenH = 1440;//GetSystemMetrics(SM_CYSCREEN);//1440;// // QScreen *screen = QGuiApplication::screen(); // int width = screen->geometry().width(); // int height = screen->geometry().height(); if(nScreenW > 0 && nScreenH > 0){ int wNew = nScreenW/50; int hNew = nScreenH/20; DefRowHeight = (hNew > DefRowHeight) ? hNew:DefRowHeight; DefColWidth = (wNew > DefColWidth) ? wNew:DefColWidth; } return; } //构建表格页显示项 void GridDataAdapter::buildItemList() { if(NULL == m_table) { return; } for(int i=0;iitem(i,j)) { QTableWidgetItem* item=new QTableWidgetItem(); item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsTristate); //if(j == 0) // item->setFlags(item->flags() & (~Qt::ItemIsEditable)); item->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);//对齐 item->setFont(QFont("Times",10)); m_table->setItem(i,j,item); } } } } //更新缓存数据并刷新视图 void GridDataAdapter::updateTableView() { if(NULL == m_table) { return; } m_pAssetCopy->setVerScrollValue(m_verScrolValue); m_pAssetCopy->setHorScrollValue(m_horScrolValue); int rcount=m_verScrolValue+m_pageRow; int ccount=m_horScrolValue+m_pageCol; //补充单页数据 int rowCount=m_verScrolBar->maximum()+m_pageRow; int colCount=m_horScrolBar->maximum()+m_pageCol; if(m_dtype==D_TableWellLogData|| m_dtype==D_TDTWellLogData|| m_dtype==D_FMTWellLogData) rcount = m_table->rowCount(); if(rcount>rowCount) { rcount=rowCount; } if(ccount>colCount) { ccount=colCount; } int index=0; DataPair dpair; QTableWidgetItem* Item=NULL; if(rcount < m_table->rowCount()) { for(int i=0;iitem(i,j); if(NULL != Item) { Item->setData(Qt::DisplayRole,QVariant()); } } } } //update m_table->setHorizontalHeaderLabels(m_tmodel->tableHeaderData()); for(int i=m_verScrolValue; i < rcount; i++) { for(int j=m_horScrolValue;j < ccount;j++) { QModelIndex ind=m_tmodel->index(i-m_verScrolValue,j-m_horScrolValue); QVariant mdata; if(ind.isValid()) mdata = m_tmodel->data(ind,Qt::DisplayRole); dpair=mdata.value(); Item = m_table->item(i-m_verScrolValue, j-m_horScrolValue); if(NULL != Item) { Item->setData(Qt::DisplayRole,dpair.value); } } } } //绑定数据并初始数据 void GridDataAdapter::bindData() { m_pageRow=0; m_pageCol=0; m_dataRowCount=0; m_dataColCount=0; if(canLoadFromSLF) calcuPageRowsCols(); if(NULL == m_table) { return; } //获取数据 switch(m_dtype) { case D_WellData: { updateWellData(); } break; case D_WellLogData: { updatetWellLogData(); attachWellLogView(); } break; case D_MultWellLogData: { updatetMultWellLogData(); attachWellLogView();//whp add 2020.5.11 for 波列数据编辑和管理 } break; case D_FMTWellLogData: { if(canLoadFromSLF) updatetFMTWellLogData(); canLoadFromSLF = false; m_horScrolBar->setVisible(false); m_verScrolBar->setVisible(false); } break; case D_TDTWellLogData: { if(canLoadFromSLF) updatetTDTWellLogData(); canLoadFromSLF = false; m_horScrolBar->setVisible(false); m_verScrolBar->setVisible(false); } break; case D_TableWellLogData: { if(canLoadFromSLF) updatetTableWellLogData(); canLoadFromSLF = false; m_horScrolBar->setVisible(false); m_verScrolBar->setVisible(false); } break; default: break; } buildItemList(); //刷新视图 updateTableView(); m_verScrolBar->setValue(m_nVerScrollValue); } void GridDataAdapter::switchLogView(bool isSwitch) { m_switch=isSwitch; } //附加曲线统计、属性编辑、计算 void GridDataAdapter::attachWellLogView() { if(NULL == m_mgr) { return; } if(!m_pWellLogs.size()) return; if(m_pWellLogs.size() > 1) { if(!m_switch ) return; }else { // m_table->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred); } bindWellLogData(0); } void GridDataAdapter::bindWellLogData(int wellLogIndex) { // if(wellLogIndex>=m_pWellLogs.size()) return; // if(m_horScrolValue /*+wellLogIndex*/ >= m_nSamples/*m_pWellLogs.size()*/) { // m_horScrolValue=m_nSamples/*m_pWellLogs.size()-wellLogIndex*/-1; // if(m_horScrolValue<0) m_horScrolValue=0; // } // if(wellLogIndex > m_pWellLogs.size()){ // wellLogIndex = m_pWellLogs.size() - 1; // } // int index=/*m_horScrolValue+*/wellLogIndex; // if(index<0) return; // CObjWellLogTABLE* pTable = dynamic_cast(m_pWellLogs[index]); // if(pTable) return; // CObjWellLog* pround = dynamic_cast(m_pWellLogs[index]); // if(pround && pround->GetSlfFileName()!="") // { // CString TypeName=pround->GetParent()->GetName(); // int Type=0; // //if(TypeName=="波列数据")Type=1; // if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile())Type=1;//whp add 2020.5.11 for 波列数据编辑和管理 // QString CurveName=pround->GetName(); // curveName = CurveName; // QString FileName=pround->GetSlfFileName(); // fileName = FileName; // QWidget* parent=qobject_cast(m_table->parent()); // if(NULL == parent) // { // return; // } // QWidget* sPage=parent->findChild("statisticsPage"); // QWidget* pPage=parent->findChild("protoprtyPage"); // QWidget* cPage=parent->findChild("computePage"); // QWidget* pvPage=parent->findChild("curvePreViewPage"); // QTabWidget* tabWidget=parent->findChild("tabWidget"); // if(NULL != sPage && NULL != pPage && NULL != cPage && NULL != pvPage) // { // if(NULL != tabWidget) // { // if(Type==0) // { // tabWidget->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); // //tabWidget->setMinimumWidth(0); // //tabWidget->setMaximumWidth(16777215); // } // else // { // tabWidget->setSizePolicy(QSizePolicy::Fixed/*Preferred*/,QSizePolicy::Expanding);//whp add 2020.5.11 for 波列数据编辑和管理 // //tabWidget->setMinimumWidth(1216); // //tabWidget->setMaximumWidth(1216); // } // QScrollArea* sScrollArea=tabWidget->findChild("sScrollArea"); // QScrollArea* pScrollArea=tabWidget->findChild("pScrollArea"); // QScrollArea* cScrollArea=tabWidget->findChild("cscrollArea"); // QScrollArea* curveScrollArea=tabWidget->findChild("curveScrollArea"); // if(NULL != sScrollArea) // { // sScrollArea->setWidget(sPage); // } // if(NULL != pScrollArea) // { // pScrollArea->setWidget(pPage); // } // if(NULL != cScrollArea) // { // if(Type==0)cScrollArea->setWidget(cPage); // } // if(NULL != curveScrollArea) // { // curveScrollArea->setWidget(pvPage); // } // sPage->show(); // pPage->show(); // pvPage->show(); // if(Type==0) // { // cPage->show();//whp change 2020.5.11 for 波列数据编辑和管理 波列曲线不计算 // } // tabWidget->show(); // //调用 // m_mgr->DataStatistics(Type,FileName,CurveName,sPage); // m_mgr->CurvePropertyEdit(Type,FileName,CurveName,pPage); // m_mgr->CallDisplayWaveOrCurve(Type,FileName,CurveName,pvPage); // if(Type==0) // { // m_mgr->CurveCompute(FileName,QStringList()<isLoad=false; m_pWellLogs[i]->LoadFromSLF(); } updatetWellLogData(); } break; case D_MultWellLogData: { // m_pWave->isLoad=false; // m_pWave->LoadFromSLF(); // updatetMultWellLogData(); } break; case D_TableWellLogData: { updatetTableWellLogData(); } break; case D_TDTWellLogData: { updatetTDTWellLogData(); } break; case D_FMTWellLogData: { updatetFMTWellLogData(); } break; } updateTableView(); } void GridDataAdapter::slotScrollChangeComplete() { { QMutexLocker locker(&m_mutex); updateTableView(); } } void GridDataAdapter::calcuPageRowsCols() { hideWellLogView(); QRect tableRect=m_table->rect();//窗口范围 if(m_pWellLogs.size() > 1&& m_pWellLogs[0]->GetTypeID()==GetClassID_WellLog() ) { if(m_switch) { if(0 == m_middleWidth) { m_middleWidth=tableRect.width(); } tableRect.setWidth(m_middleWidth); }else { if(0 == m_gridWidth) { m_gridWidth=tableRect.width(); } tableRect.setWidth(m_gridWidth); } } else if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile()) { if(m_switch) { if(0==m_middleWidth) { m_middleWidth =tableRect.width(); } tableRect.setWidth(m_middleWidth); } else { if(0==m_middleWidth) { m_gridWidth =tableRect.width(); } tableRect.setWidth(m_gridWidth); } } if(tableRect.isEmpty()) { return; } int tableWidth=tableRect.width(); int tableHeight=tableRect.height() - 3*DefRowHeight; if(tableHeight < 0) tableHeight = 1; m_pageRow = (tableHeight % DefRowHeight == 0) ? (tableHeight / DefRowHeight) : (tableHeight / DefRowHeight + 1); if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogWavefile()) m_pageCol=(tableWidth%DefColWidth==0)?(tableWidth/DefColWidth):(tableWidth/DefColWidth); else if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogTDT()){ m_pageCol=TDT.TotalLogNumber*3; } else if(m_pWellLogs[0]->GetTypeID()==GetClassID_WellLogFMT()){ m_pageCol=FMT.TotalPointNum; } else { m_pageCol = m_pWellLogs.size() + 1; //m_pageCol = (tableWidth%DefColWidth==0)?(tableWidth/DefColWidth):(tableWidth/DefColWidth+1); } if(m_dtype == D_TableWellLogData|| m_dtype==D_TDTWellLogData|| m_dtype==D_FMTWellLogData){ m_pageRow = recordcount/*(m_pageRow > recordcount) ? m_pageRow : recordcount + m_pageRow*/; m_pageCol = m_TitleField.size()-1; } m_table->setRowCount(m_pageRow); m_table->setColumnCount(m_pageCol); for(int i = 0; i < m_pageRow; i++) m_table->setRowHeight(i, DefRowHeight); if(m_dtype != D_TableWellLogData&& m_dtype!=D_TDTWellLogData&& m_dtype!=D_FMTWellLogData) m_table->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); for(int i = 0; i < m_pageCol; i++) m_table->setColumnWidth(i,DefColWidth); if(m_dtype == D_TableWellLogData|| m_dtype == D_TDTWellLogData|| m_dtype == D_FMTWellLogData) { m_table->horizontalHeader()->setDefaultSectionSize(DefColWidth); } else if(m_pageCol * DefColWidth <= tableWidth) m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); else { m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed); m_table->horizontalHeader()->setDefaultSectionSize(DefColWidth); } } void GridDataAdapter::hideWellLogView() { QWidget* parent=qobject_cast(m_table->parent()); if(NULL == parent) { return; } QWidget* sPage=parent->findChild("statisticsPage"); QWidget* pPage=parent->findChild("protoprtyPage"); QWidget* cPage=parent->findChild("computePage"); QWidget* pvPage=parent->findChild("curvePreViewPage"); QTabWidget* tabWidget=parent->findChild("tabWidget"); if(NULL != sPage && NULL != pPage) { if(NULL != tabWidget) { sPage->hide(); pPage->hide(); cPage->hide(); pvPage->hide(); tabWidget->hide(); } } m_table->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); } /////////////////////////////begin==TableModel//////////////////////////////////////////// TableModel::TableModel(QObject* parent) :QAbstractTableModel(parent) { } void TableModel::clearBuffer() { m_dataBuffer.clear(); } int TableModel::rowCount(const QModelIndex &parent) const { return m_dataBuffer.size(); } int TableModel::columnCount(const QModelIndex &parent) const { if(m_dataBuffer.size()>0) return m_dataBuffer.value(0).size(); else return 0; } QVariant TableModel::data(const QModelIndex &index, int role) const { if(!index.isValid()||role!=Qt::DisplayRole) { return QVariant(); } int row=index.row(); int col=index.column(); QList colData=m_dataBuffer.value(row); if(col>= colData.size()|| col<0) { return QVariant(); } DataPair dp= colData.value(col); return QVariant::fromValue(dp); } QStringList TableModel::tableHeaderData() { return m_headerData; } void TableModel::setTableHeaderData(const QStringList &headerLst) { m_headerData.clear(); m_headerData=headerLst; } void TableModel::clearHeader() { m_headerData.clear(); } void TableModel::setModelData(const QList< QList >& model ) { m_dataBuffer=model; } //////////////////end==TableModel/////////////////////////////////////////////////////// //初始化井眼轨迹 void GridDataAdapter::initWellData(DType type,pai::datamodel::CObjWell* pwell) { m_pWell=pwell; m_dtype=type; } //单元格是否更改 bool GridDataAdapter::isCellChanged() { bool editSingleModify= m_editRange.rowCount()==m_editRange.columnCount(); editSingleModify &= m_editRange.rowCount()==1; QTableWidgetItem* item=NULL; bool isParse=m_pAssetCopy->isParse(); if(isParse) { return isParse; } if(editSingleModify) { item=m_table->item(m_editRange.topRow(),m_editRange.leftColumn()); if(NULL == item) { return false; } if(item->text()==m_cellText) { return false; } } return true; } //发起保存 void GridDataAdapter::CommitToSave() { emit signalCommitToSave(); } //排序 void BubbleSort(int *a, int n) { int i, j; for (i = 1; i < n; i++) for (j = 0; j <= n - 1 - i; j++) if (a[j] > a[j + 1]) swap(a[j], a[j + 1]); } void GridDataAdapter::calNewPageRow() { m_pageRow = m_table->rowCount(); int rowCount = m_pageRow; int count=rowCount; for(int row = 0; row < rowCount; row++) { if(!m_table->item(row,0)) { count = row; break; } /* else{ if(m_table->item(row,0)->text() == ""){ count = row; break; } } */ } recordcount = count; } void GridDataAdapter::sortSequence_SLOT() { if(m_table->horizontalHeaderItem(0)->text() != "NO") { QMessageBox::about(NULL, "提示", "无法修改该表序列!"); return; } for(int rTemp = 0; rTemp < m_table->rowCount(); rTemp++) { m_table->item(rTemp, 0)->setText(QString("%1").arg(rTemp + 1)); } refreshTempModel(); } void GridDataAdapter::sortCompute_SLOT() { // if(!m_pWellLogs.size()) return; // QList selItems = m_table->selectedItems(); // if(selItems.size() > 0){ // int curRow = m_table->column(selItems.at(0)); // CDataTree *pDatatree=(CDataTree *)::GetProject()->m_pDataTree; // pDatatree->magr->CurveCompute(m_pWellLogs,curRow); // } } void GridDataAdapter::onDeleteLinesData() { if(NULL == m_menu || NULL == m_table) return; //删除操作不再直接执行保存 QList selItems = m_table->selectedItems(); QList selRanges = m_table->selectedRanges(); if(selItems.size() > 0){ calNewPageRow(); int *drow = new int[selItems.size()]; int drowNum = 0; for(int ri = 0; ri < selItems.size(); ri++) drow[ri] = -1; for(int i = 0; i < selItems.size(); i++){ int curRow = m_table->row(selItems.at(i)); if(curRow == -1 || curRow + 1 > m_pageRow) continue; int ri = 0; for(ri; ri < selItems.size(); ri++) if(drow[ri] == curRow) break; if(ri == selItems.size()){ drow[drowNum++] = curRow; } } BubbleSort(drow, drowNum); QList> data; for(int nRow = 0; nRow < m_pageRow; nRow++) { bool f = false; for(int i = 0; i < drowNum; i++){ if(nRow == drow[i]) f = true; } if(f) continue; if(nRow >= recordcount) break; QList lstData; for(int nCol = 0; nCol < m_table->columnCount(); nCol++) { QString Qbug = m_table->item(nRow, nCol)->text(); lstData<setRowCount(recordcount); delete []drow; } //updatetTableWellLogData(); m_pageRow = recordcount; m_pageCol = m_table->columnCount(); updateTableView(); } void GridDataAdapter::addALine_SLOT() { if(NULL == m_menu || NULL == m_table) return; QList selRanges = m_table->selectedRanges(); QTableWidgetSelectionRange copyRange = selRanges.value(0); int X = copyRange.topRow() + 1; addALine(X); } void GridDataAdapter::addALine_SLOT(int X) { addALine(X); } void GridDataAdapter::addALine(int X) { m_table->insertRow(X); m_table->setRowHeight(X, m_table->rowHeight(0)); for(int nCol = 0; nCol < m_table->columnCount(); nCol++){ QTableWidgetItem* pItem = new QTableWidgetItem; pItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEditable|Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsTristate); pItem->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); //if(nCol == 0) //pItem->setFlags(pItem->flags() & (~Qt::ItemIsEditable)); pItem->setFont(QFont("Times", 10)); pItem->setText(""); m_table->setItem(X, nCol, pItem); } m_pageRow++; recordcount++; m_pageCol = m_table->columnCount(); refreshTempModel(); //updateTableView(); } void GridDataAdapter::refreshTempModel_SLOT() { refreshTempModel(); } void GridDataAdapter::refreshTempModel() { QList> data; for(int nRow = 0; nRow < m_table->rowCount(); nRow++) { QList lstData; for(int nCol = 0; nCol < m_table->columnCount(); nCol++) { if(!m_table->item(nRow, nCol)) continue; QString iText = m_table->item(nRow, nCol)->text(); lstData << DataPair(iText); } data<rowCount(); recordcount = m_pageRow; m_pageCol = m_table->columnCount(); } int GridDataAdapter::getRecordCount() { return recordcount; } //右键菜单 void GridDataAdapter::addActonMenu(int type){ if(m_menu == NULL) return; if(type == 2) //表格数据 的 菜单 { m_pAssetCopy->initPopMenu(m_table, m_menu); connect(m_pAssetCopy, SIGNAL(signalParseData(const QTableWidgetSelectionRange&)), this, SLOT(onParseData(const QTableWidgetSelectionRange&))); connect(m_pAssetCopy, SIGNAL(saveToTempModel()), this, SLOT(refreshTempModel_SLOT())); connect(m_pAssetCopy, SIGNAL(needANewLine(int)), this, SLOT(addALine_SLOT(int))); QIcon icon = QIcon(::GetImagePath() + "/UIMake/addLine.png"); QAction* action = m_menu->addAction(icon, "插入一行"); connect(action, SIGNAL(triggered()), this, SLOT(addALine_SLOT())); icon = QIcon(::GetImagePath() + "/UIMake/delete.png"); action = m_menu->addAction(icon, "删除选中行"); connect(action, SIGNAL(triggered()), this, SLOT(onDeleteLinesData())); icon = QIcon(::GetImagePath() + "/UIMake/sortCol.png"); action = m_menu->addAction(icon, "整理序列数"); connect(action, SIGNAL(triggered()), this,SLOT(sortSequence_SLOT())); icon = QIcon(::GetImagePath() + "/icon/AddToTrack.png"); action = m_menu->addAction(icon, "计算"); connect(action, SIGNAL(triggered()), this,SLOT(sortCompute_SLOT())); } } void GridDataAdapter::reqCustomComtextMenu(const QPoint &pos) { m_pAssetCopy->reqCustomComtextMenu(pos); } void GridDataAdapter::onParseData(const QTableWidgetSelectionRange &parseRange) { m_editRange=parseRange; slotCommitToSave(); } //保存 void GridDataAdapter::slotCommitToSave() { if(m_editRange.topRow()<0 || NULL == m_table || !isCellChanged()) { return; } bool isExtract=false; switch(m_dtype) { //保存井眼轨迹 case D_WellData: { QList > editWellData; QList modifyRows; extractWellData(editWellData,modifyRows,isExtract); if(isExtract) { saveWellData(editWellData,modifyRows); } } break; //保存曲线数据 case D_WellLogData: { QList > editWellLogData; extractWellLogData(editWellLogData,isExtract); if(isExtract) { saveWellLogData(editWellLogData); } } break; //保存多维曲线数据 case D_MultWellLogData: { saveMultWellLogData(isExtract); } break; //保存表格 case D_TableWellLogData: { //saveTableWellLogData(isExtract); } break; default: break; } resetEditRange(); if(!isExtract && m_dtype != D_TableWellLogData) { QMessageBox::information(m_table,"提示","保存失败!"); } } //提取井眼轨迹 void GridDataAdapter::extractWellData(QList > &editData,QList &modifyRows ,bool &isScuccess) { int sRow=m_editRange.topRow(); int eRow=m_editRange.bottomRow(); int sCol=m_editRange.leftColumn(); int eCol=m_editRange.rightColumn(); QList wellXYZ; QString textValue; bool isMatch=true; for(int i=sRow;i<=eRow;i++) { getWellData(i,2,wellXYZ,isMatch); getWellData(i,3,wellXYZ,isMatch); getWellData(i,4,wellXYZ,isMatch); modifyRows<value(); if(!isMatch) { break; } editData<& wellXYZ,bool& covSuccss) { QTableWidgetItem* item=m_table->item(row,col); QString textValue; QRegExp rx("[0-9.0-9]*"); if(NULL != item) { textValue=item->text(); covSuccss=rx.exactMatch(textValue); if(!covSuccss) { return; } wellXYZ<(m_table->parent()); // QWidget* pvPage=parent->findChild("curvePreViewPage"); // if(pvPage!=NULL) // m_mgr->CallDisplayWaveOrCurve(0,fileName,curveName,pvPage); // } break; case D_MultWellLogData: break; case D_TableWellLogData: break; case D_TDTWellLogData: break; case D_FMTWellLogData: break; default: break; } } //井眼轨迹 void GridDataAdapter::updateWellData() { // QMutexLocker locker(&m_mutex); // if(NULL == m_pWell) // { // return; // } // m_pWell->LoadXYZ(); // DOUBLEPROPERTY& vX = m_pWell->GetX(); // DOUBLEPROPERTY& vY = m_pWell->GetY(); // DOUBLEPROPERTY& vZ = m_pWell->GetZ(); // float sdep=m_pWell->GetStartDep(); // float rlev=m_pWell->GetRlev(); // m_TitleField.clear(); // m_TitleField<<"No" << "depth" << "X" << "Y" << "Z" <<" "; // clearBuffer(); // setColCount(m_TitleField.size()); // if(m_pageCol!=m_TitleField.size()) // { // fillDefaultTitle(m_TitleField,m_pageCol); // } // setTableHeaderData(m_TitleField); // QList > data; // if( (vX.empty() == false) && (vX.size() == vY.size()) && (vY.size()== vZ.size()) ) // { // vector::size_type tempVxSize = vX.size(); // setRowCount((int)tempVxSize); // if(m_pageCol>m_TitleField.size()) // { // m_pageCol=m_TitleField.size(); // } // if(m_pageRow>tempVxSize) // { // m_pageRow=tempVxSize; // } // //calcuItemCount(m_pageRow,m_pageCol); // QList lstData; // int maxRecord=m_verScrolValue+m_pageRow; // if(maxRecord>tempVxSize) // { // maxRecord=tempVxSize; // } // QString no,dept,x,y,z; // m_pAssetCopy->setVerScrollValue(m_verScrolValue); // m_pAssetCopy->setHorScrollValue(m_horScrolValue); // for(vector::size_type ix = m_verScrolValue; ix < maxRecord; ++ix) // { // lstData.clear(); // double ixa=ix; // no=toString(ixa,'d',0,0); // dept=toString(sdep+ix*rlev,'f',5,0); // if( (vX.size() > ix) && (vY.size() > ix) && (vZ.size() > ix) ) // { // x=toString(vX.m_vProperty[ix],'f',DECIMALPLACESNUM,0); // y=toString(vY.m_vProperty[ix],'f',DECIMALPLACESNUM,0); // z=toString(vZ.m_vProperty[ix],'f',DECIMALPLACESNUM,0); // }else // { // x=QString("-9999.000"); // y=x; // z=x; // } // lstData<ClearXYZ(); } //井眼轨迹 void GridDataAdapter::saveWellData(QList > data,QList modifyRows) { // m_pWell->LoadXYZ(); // DOUBLEPROPERTY& vX = m_pWell->GetX(); // DOUBLEPROPERTY& vY = m_pWell->GetY(); // DOUBLEPROPERTY& vZ = m_pWell->GetZ(); // // DOUBLEPROPERTY vX(rowCount),vY(rowCount),vZ(rowCount); // for(int i = 0; i < modifyRows.size(); i++) // { // double xColumn =data.value(i).value(0); //m_pUI->tableWidget->item(rows[i], 2)->text(); // double yColumn =data.value(i).value(1); //m_pUI->tableWidget->item(rows[i], 3)->text(); // double zColumn =data.value(i).value(2); // m_pUI->tableWidget->item(rows[i], 4)->text(); // vX.m_vProperty[modifyRows[i]] = xColumn; // vY.m_vProperty[modifyRows[i]] = yColumn; // vZ.m_vProperty[modifyRows[i]] = zColumn; // } // m_pWell->SetX( &vX ); // m_pWell->SetY( &vY ); // m_pWell->SetZ( &vZ ); // m_pWell->ClearXYZ(); } //导出井眼轨迹 void GridDataAdapter::exportWellData(FILE *fp, DepthProgress& process) { // if(NULL == m_pWell) // { // return; // } // m_pWell->LoadXYZ(); // DOUBLEPROPERTY& vX = m_pWell->GetX(); // DOUBLEPROPERTY& vY = m_pWell->GetY(); // DOUBLEPROPERTY& vZ = m_pWell->GetZ(); // float sdep=m_pWell->GetStartDep(); // float rlev=m_pWell->GetRlev(); // if( (vX.empty() == false) && (vX.size() == vY.size()) && (vY.size()== vZ.size()) ) // { // vector::size_type tempVxSize = vX.size(); // QString conTents; // process.CreatProgress(0,tempVxSize,"正在导出数据..."); // for(vector::size_type ix = 0; ix < tempVxSize; ++ix) // { // conTents=""; // QStringList colList; // double ixa=ix; // colList<ClearXYZ(); } //初始化曲线 void GridDataAdapter::initWellLogData(DType type,QList WellLogs) { m_pWellLogs=WellLogs; m_pAssetCopy->SetWellLogs(type,WellLogs); if(!m_pWellLogs.size()) return; for(int i = 0; i < m_pWellLogs.size(); i++){ m_pWellLogs[i]->isUsing = true; } m_dtype=type; vP=new PFLOATPROPERTY *[m_pWellLogs.size()]; for(int i=0;iisLoad=false; m_pWellLogs[i]->LoadFromSLF(); vP[i]=&m_pWellLogs[i]->GetProperty(); } m_TitleField.clear(); QString depthUnit=m_pWellLogs[0]->GetDepthUnit(); if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit=""; else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit=""; if(depthUnit.isEmpty()) m_pWellLogs[0]->GetDepthAliasUnit(); if(depthUnit.isEmpty()) depthUnit="米"; m_TitleField << "MD\n"+depthUnit; double nStart =m_pWellLogs[0]->GetTopDepth(); double nEnd =m_pWellLogs[0]->GetBottomDepth(); for(int i=1;im_pWellLogs[i]->GetTopDepth()) nStart=m_pWellLogs[i]->GetTopDepth(); if(nEndGetBottomDepth()) nEnd=m_pWellLogs[i]->GetBottomDepth(); } m_SDep = nStart; m_EDep = nEnd; WellLogTableDialogNew* parent=qobject_cast(m_table->parent()); if(NULL == parent) { return; } QTabWidget* tabWidget=parent->findChild("tabWidget"); for(int i=0;iGetUnit(); if(m_Unit.isEmpty()) m_Unit=m_pWellLogs[i]->GetAliasUnit(); if(m_Unit.isEmpty()) { char strTmp[16] = "CurveFamily.ini"; QStringList cs=GetSimilarCurves(m_pWellLogs[i]->GetName(),strTmp,false); if(cs.size()>3) { m_Unit=cs[3]; } } int pos=0,pos1=0; if((pos=m_Unit.indexOf("^"))>-1&&(pos1=m_Unit.indexOf("^",pos+1))>-1) { QStringList fh=GetSimilarCurves(m_Unit.mid(pos,pos1-pos+1)); if(fh.size())m_Unit.replace(m_Unit.mid(pos,pos1-pos+1),fh[0]); } pos=0,pos1=0; if((pos=m_Unit.indexOf("!"))>-1&&(pos1=m_Unit.indexOf("!",pos+1))>-1) { QStringList fh=GetSimilarCurves(m_Unit.mid(pos,pos1-pos+1)); if(fh.size())m_Unit.replace(m_Unit.mid(pos,pos1-pos+1),fh[0]); } m_TitleField <GetName() +"\n"+m_Unit; } PFLOATPROPERTY &vM=m_pWellLogs[0]->GetMD(); if(vM.size()<1) return ; m_TitleField << " "; //luol 20200302 clearBuffer(); //setColCount(m_TitleField.size()); } //提取曲线数据 void GridDataAdapter::extractWellLogData(QList > &editData ,bool &isScuccess) { int sRow=m_editRange.topRow(); int eRow=m_editRange.bottomRow(); int sCol=m_editRange.leftColumn(); int eCol=m_editRange.rightColumn(); QString textValue; bool isMatch=true; QRegExp rx("-?[0-9.0-9]*"); QTableWidgetItem* item=NULL; for(int i=sRow;i<=eRow;i++) { QList rowList; for(int j=sCol;j<=eCol;j++) { if(m_pAssetCopy->isParse()) { textValue=m_pAssetCopy->itemParseText(i,j); isScuccess=rx.exactMatch(textValue); if(!isScuccess) { break; } rowList<item(i,j); if(NULL != item) { textValue=item->text(); isScuccess=rx.exactMatch(textValue); if(!isScuccess) { break; } rowList<restParse(); } //保存曲线 void GridDataAdapter::saveWellLogData(QList > depthList) { int sRow=m_editRange.topRow(); int eRow=m_editRange.bottomRow(); int sCol=m_editRange.leftColumn(); int eCol=m_editRange.rightColumn(); PFLOATPROPERTY &vM=m_pWellLogs[0]->GetMD(); double nStart =m_pWellLogs[0]->GetTopDepth(); double nEnd =m_pWellLogs[0]->GetBottomDepth(); for(int i=1;im_pWellLogs[i]->GetTopDepth()) nStart=m_pWellLogs[i]->GetTopDepth(); if(nEndGetBottomDepth()) nEnd=m_pWellLogs[i]->GetBottomDepth(); } int col,row,pos,cindex; float dep,val; col=row=pos=cindex=0; dep=val=0; QList cindexs; for(int i=sRow;i<=eRow;i++) { dep=nStart+(i+m_verScrolValue)*vM.m_vProperty[2]; col=0; for(int j=sCol;j<=eCol;j++) { //屏蔽深度修改 if(0==j) { continue; } cindex=j+m_horScrolValue-1; //单曲线类型更新 if(1==m_pWellLogs.size()) { cindex=0; }//else 多曲线更新 if(cindexs.indexOf(cindex)<=0) cindexs.append(cindex); val=depthList.value(row).value(col); m_pWellLogs[cindex]->SetData(i+m_verScrolValue,&val); // vP[cindex]->m_vProperty[i+m_verScrolValue]=val; col++; } row++; } for(int i=0;iSaveToSLF(); } } //刷新曲线 void GridDataAdapter::updatetWellLogData() { QMutexLocker locker(&m_mutex); if(VerScrollUp && !VerScrollChanged) return; PFLOATPROPERTY &vM = m_pWellLogs[0]->GetMD(); if(vM.size() < 1) return ; m_Rlev = vM.m_vProperty[2]; double nStart = m_pWellLogs[0]->GetTopDepth(); double nEnd = m_pWellLogs[0]->GetBottomDepth(); for(int i=1;i m_pWellLogs[i]->GetTopDepth()) nStart = m_pWellLogs[i]->GetTopDepth(); if(nEnd < m_pWellLogs[i]->GetBottomDepth()) nEnd = m_pWellLogs[i]->GetBottomDepth(); } m_PointNum = (nEnd - nStart) / m_Rlev; int horScrollOffset = m_horScrolValue; if(m_horScrolValue > 0) { horScrollOffset--; } char buffer[200]; buffer[0] = 0; if(!vP||!vP[0]) return; if(vP[0]->empty() == false) { vector::size_type tempVxSize = vP[0]->size(); m_PointNum = vP[0]->size(); setColCount(m_TitleField.size()); setRowCount(tempVxSize); QStringList tempFields; int pageCol=m_pageCol; if(m_pageCol>m_TitleField.size()) { m_pageCol=m_TitleField.size(); } if(m_pageRow>tempVxSize) { m_pageRow=tempVxSize; } for(int i=0;i= m_TitleField.size()) { break; } tempFields << m_TitleField[m_horScrolValue + i]; } if(pageCol != m_pageCol) { fillDefaultTitle(tempFields,pageCol); } setTableHeaderData(tempFields); float val=0; double dep=0; int pos=0; int rowSize=0; QList > data; int maxRowRecord = m_verScrolValue + m_pageRow; int maxColRecord = m_horScrolValue + m_pageCol; if(maxRowRecord > tempVxSize) { maxRowRecord = tempVxSize; } if(maxColRecord > m_pWellLogs.size()) { maxColRecord = m_pWellLogs.size(); } data.reserve(maxRowRecord - m_verScrolValue); m_pAssetCopy->setVerScrollValue(m_verScrolValue); m_pAssetCopy->setHorScrollValue(m_horScrolValue); for(vector::size_type ix = m_verScrolValue; ix < maxRowRecord; ix++) { dep = nStart + ix * vM.m_vProperty[2]; QList lstData; //lstData.reserve(maxColRecord-m_horScrolValue); if(m_horScrolValue == 0) { lstData<= 0 && horScrollOffset < m_pWellLogs.size()) { if(vP && vP[horScrollOffset]) { rowSize = vP[horScrollOffset]->m_size; pos = (dep - m_pWellLogs[horScrollOffset]->GetTopDepth()) / m_pWellLogs[horScrollOffset]->GetRlev() + 0.5; if(pos >= 0 && pos < rowSize) { val = m_pWellLogs[horScrollOffset]->GetData(pos, buffer); //val=vP[horScrollOffset]->m_vProperty[pos]; } else { buffer[0] = 0; val = -9999; } if(m_pWellLogs[horScrollOffset]->acurveinfo.RepCode != REPR_STRING) lstData<GetTopDepth()) / m_pWellLogs[i]->GetRlev()+0.5; rowSize = vP[i]->m_size; if(pos >= 0 && pos < vP[i]->size()) { val = m_pWellLogs[i]->GetData(pos, buffer); } else { buffer[0] = 0; val = -9999; } if(m_pWellLogs[i]->acurveinfo.RepCode != REPR_STRING) lstData << DataPair(toString(val, 'f', FLOATPREC, 0,false)); else lstData << DataPair(buffer); } data<fields.size()?pageCol-fields.size():0; for(int i=0;iGetMD(); if(vM.size()<1) return ; char buffer[200]; if(!vP||!vP[0]) return; if(!vP[0]->empty()) { float val=0; int maxColRecord=m_TitleField.size(); vector::size_type tempVxSize = vP[0]->size(); QString conTents; progress.CreatProgress(0,tempVxSize,"正在导出数据..."); if(maxColRecord>m_pWellLogs.size()) { maxColRecord=m_pWellLogs.size(); } for(vector::size_type ix = 0; ix !=tempVxSize; ix++) { conTents=""; for(int i=0;im_size; if(ixGetData((int)ix,buffer); // vP[i]->m_vProperty[ix]; }else { buffer[0]=0; val=-9999; } QString str=buffer; if(m_pWellLogs[i]->acurveinfo.RepCode!=REPR_STRING) str= toString(val,'f',DECIMALPLACESNUM,0,false); str.replace(","," "); if(i ==maxColRecord-1) { conTents += str ; } else { conTents += str + " "; } } fprintf(fp,"%s\n",conTents.toStdString().c_str()); progress.SetDepth(ix+1); } } } ////////////////////////////////////////////////////////// void GridDataAdapter::initMultWellLogData(DType type,QList WellLogs) { // m_pWellLogs=WellLogs; // for(int i = 0; i < m_pWellLogs.size(); i++){ // m_pWellLogs[i]->isUsing = true; // } // m_pAssetCopy->SetWellLogs(type,WellLogs); // m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0]; // if(!m_pWave)return; // m_pWave->isLoad=false; // m_pWave->LoadFromSLF(); // m_MutiVM=&m_pWave->GetProperty(); // WaveInfo=m_pWave->waveinfo; // m_dtype=type; // m_SDep = WaveInfo.StartDepth; // m_EDep = WaveInfo.EndDepth; // m_Rlev = WaveInfo.DepLevel; // m_RepCode = WaveInfo.RepCode; // m_CodeLen = WaveInfo.CodeLen; // m_SamplePoint = WaveInfo.SamplePoint; // m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum; // m_flRlev2 = WaveInfo.TimeLevel; // m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5)); // m_TitleField.clear(); // QString depthUnit=m_pWellLogs[0]->GetDepthUnit(); // if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit=""; // else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit=""; // if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit(); // if(depthUnit.isEmpty()) depthUnit="米"; // m_TitleField << "MD\n"+depthUnit; // char buf[100]; // for(int j=0;j WellLogs) { m_pWellLogs=WellLogs; for(int i = 0; i < m_pWellLogs.size(); i++){ m_pWellLogs[i]->isUsing = true; } m_dtype=type; m_pAssetCopy->SetWellLogs(type,WellLogs); m_TitleField.clear(); int a=0; //获得表格头 CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { delete logio; return ; } char name[100]; strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); int iIndex=logio->OpenTDT(name); if (iIndex >=0) { a=1; logio->GetTDTInfo(iIndex,&TDT); int fc=3*TDT.TotalLogNumber; if(fc<1) { delete logio; return; } for(int j=0;jCloseTDT(iIndex); delete logio; } ////////////////////////////////////////////////////////// void GridDataAdapter::initFMTWellLogData(DType type,QList WellLogs) { // m_pWellLogs=WellLogs; // for(int i = 0; i < m_pWellLogs.size(); i++){ // m_pWellLogs[i]->isUsing = true; // } // m_pAssetCopy->SetWellLogs(type,WellLogs); // m_pWave=(CObjWellLogWavefile *)m_pWellLogs[0]; // if(!m_pWave)return; // m_pWave->isLoad=false; // m_pWave->LoadFromSLF(); // m_MutiVM=&m_pWave->GetProperty(); // WaveInfo=m_pWave->waveinfo; // m_dtype=type; // m_SDep = WaveInfo.StartDepth; // m_EDep = WaveInfo.EndDepth; // m_Rlev = WaveInfo.DepLevel; // m_RepCode = WaveInfo.RepCode; // m_CodeLen = WaveInfo.CodeLen; // m_SamplePoint = WaveInfo.SamplePoint; // m_nSamples = WaveInfo.SamplePoint*WaveInfo.ArrayNum; // m_flRlev2 = WaveInfo.TimeLevel; // m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+1.5)); // m_TitleField.clear(); // QString depthUnit=m_pWellLogs[0]->GetDepthUnit(); // if(m_pWellLogs[0]->GetDepthUnit()=="m"&&depthUnit!="m"&&depthUnit!="米") depthUnit=""; // else if(m_pWellLogs[0]->GetDepthUnit()=="ft"&&depthUnit!="ft"&&depthUnit!="英尺") depthUnit=""; // if(depthUnit.isEmpty()) depthUnit=m_pWellLogs[0]->GetDepthAliasUnit(); // if(depthUnit.isEmpty()) depthUnit="米"; // m_TitleField << "MD\n"+depthUnit; // char buf[100]; // for(int j=0;jGetSlfFileName(); // CLogIO * logio=new CLogIO(); // if(!logio->Open(filePath.toStdString().c_str(),CSlfIO::modeReadWrite)) // { // delete logio; // return; // } // int iIndex = logio->OpenWave(m_pWave->GetName().toStdString().c_str()); // if (iIndex >= 0) // { // int row,col,pos; // row=0; // col=pos=row; // float value,dep; // value=dep=0; // int actRow=0; // int actCol=0; // char *vchar=(char*)m_MutiVM->m_vProperty; // int sRow=m_editRange.topRow(); // int eRow=m_editRange.bottomRow(); // int sCol=m_editRange.leftColumn(); // int eCol=m_editRange.rightColumn(); // QList > editlist; // extractMultWellLogData(editlist,isScuccess); // for(int i=sRow;i<=eRow;i++) // { // actRow=m_verScrolValue+i; // col=0; // for(int j=sCol;j<=eCol;j++) // { // actCol=m_horScrolValue+j; // if(isScuccess) // { // pos=actRow*m_nSamples+(actCol-1); // value=editlist.value(row).value(col); // setData(m_RepCode,(char*)&vchar[pos*m_CodeLen],value); // DWORD result=logio->WriteWave(iIndex,m_SDep,m_PointNum,(void*)m_MutiVM->m_vProperty); // } // col++; // } // row++; // } // logio->CloseWave(iIndex); // } // delete logio; } //void GridDataAdapter::extractMultWellLogData(int &row,int &col,float &value,bool &isScuccess) void GridDataAdapter::extractMultWellLogData(QList > &editData,bool &isScuccess) { int sRow=m_editRange.topRow(); int eRow=m_editRange.bottomRow(); int sCol=m_editRange.leftColumn(); int eCol=m_editRange.rightColumn(); QString textValue; bool isMatch=true; QRegExp rx("[0-9.0-9]*"); QTableWidgetItem* item=NULL; //需要更新行数 FLOATPROPERTY vM; vM.SetSize(3); vM.m_vProperty[0]=m_SDep; vM.m_vProperty[1]=m_EDep; vM.m_vProperty[2]=m_Rlev; if(m_PointNum>0) { for(int i=sRow;i<=eRow;i++) { QList rowList; for(int j=sCol;j<=eCol;j++) { if(m_pAssetCopy->isParse()) { textValue=m_pAssetCopy->itemParseText(i,j); isScuccess=rx.exactMatch(textValue); if(!isScuccess) { break; } rowList<item(i,j); if(NULL != item) { textValue=item->text(); isScuccess=rx.exactMatch(textValue); if(!isScuccess) { break; } rowList<restParse(); } void GridDataAdapter::setData(int repCode,char *buffer,double yy) { if(!buffer) { return; } switch(repCode) { case REPR_INT: //0 (*((int*)buffer))=(int)yy; break; case REPR_SHORT: //1 (*((short *)buffer))=(short)yy; break; case REPR_LONG://2 (*((long *)buffer))=(long)yy; break; case REPR_FLOAT://3 (*((float *)buffer))=yy; break; case REPR_DOUBLE://4 (*((double *)buffer))=(double)yy; break; case REPR_CHAR://5 (*((char *)buffer))=(char)yy; break; case REPR_UCHAR://6 (*((unsigned char *)buffer))=(unsigned char)yy; break; case REPR_USHORT://7 (*((unsigned short *)buffer))=(unsigned short)yy; break; case REPR_UINT://8 (*((unsigned int *)buffer))=(unsigned int)yy; break; case REPR_ULONG://9 (*((unsigned long *)buffer))=(unsigned long )yy; break; case REPR_STRING://10 // *yy=-99999; break; } return; } float GridDataAdapter::getData(int repCode,char *buffer) { float yy; if(!buffer) { return 0; } switch(repCode) { case REPR_INT: //0 yy=(double)(*((int*)buffer)); break; case REPR_SHORT: //1 yy=(double)(*((short *)buffer)); break; case REPR_LONG://2 yy=(double)(*((long *)buffer)); break; case REPR_FLOAT://3 yy=(double)(*((float *)buffer)); break; case REPR_DOUBLE://4 yy=(double)(*((double *)buffer)); break; case REPR_CHAR://5 yy=(double)(*((char *)buffer)); break; case REPR_UCHAR://6 yy=(double)(*((unsigned char *)buffer)); break; case REPR_USHORT://7 yy=(double)(*((unsigned short *)buffer)); break; case REPR_UINT://8 yy=(double)(*((unsigned int *)buffer)); break; case REPR_ULONG://9 yy=(double)(*((unsigned long *)buffer)); break; case REPR_STRING://10 yy=-99999; break; } return yy; } void GridDataAdapter::updatetMultWellLogData() { QMutexLocker locker(&m_mutex); FLOATPROPERTY vM; vM.SetSize(3); vM.m_vProperty[0]=m_SDep; vM.m_vProperty[1]=m_EDep; vM.m_vProperty[2]=m_Rlev; int pageCol=m_pageCol; if(m_pageCol>m_TitleField.size()) { m_pageCol=m_TitleField.size(); } QStringList tempFields; for(int i=0;i= m_TitleField.size()) { break; } tempFields<0) { horScrollOffset--; } if(m_PointNum>0) { vector::size_type tempVxSize = m_PointNum; if(m_pageRow>tempVxSize) { m_pageRow=tempVxSize; } setRowCount(tempVxSize); float val=0; double dep=0; int pos=0; char *vchar=(char*)m_MutiVM->m_vProperty; //m_MutiVM已在initMultWellLogData()中获取曲线信息 QList > data; int maxRowRecord=m_verScrolValue+m_pageRow; int maxColRecord=m_horScrolValue+m_pageCol; if(maxRowRecord>tempVxSize) { maxRowRecord=tempVxSize; } if(maxColRecord>m_nSamples) { maxColRecord=m_nSamples; } m_pAssetCopy->setVerScrollValue(m_verScrolValue); m_pAssetCopy->setHorScrollValue(m_horScrolValue); for(vector::size_type ix = m_verScrolValue; ix < maxRowRecord; ++ix) { dep=vM.m_vProperty[0]+ix*vM.m_vProperty[2];//cur depth QList lstData; if(m_horScrolValue==0) //The first col is depthValue { lstData<size()) val =getData(m_RepCode,(char*)&vchar[pos*m_CodeLen]); else val=-9999; lstData<size()) val =getData(m_RepCode,(char*)&vchar[pos*m_CodeLen]); else val=-9999; lstData<setColumnWidth(i, itemWidth[m_horScrolValue + i]); */ } } void GridDataAdapter::updatetTDTWellLogData() { QMutexLocker locker(&m_mutex); QStringList tempFields; if(m_pageCol>m_TitleField.size()) { m_pageCol=m_TitleField.size(); } if(m_pageRow > recordcount) { m_pageRow=recordcount; } for(int i=0;i= m_TitleField.size()) { break; } tempFields<recordcount) { maxRowRecord=recordcount; } if(maxColRecord>m_TitleField.size()) { maxColRecord=m_TitleField.size(); } //获得表格头 CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { delete logio; return ; } char name[100]; strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); int iIndex=logio->OpenTDT(name); if (iIndex >=0) { logio->GetTDTInfo(iIndex,&TDT); TDT_DATA**pTDT=new TDT_DATA*[TDT.TotalLogNumber]; int *num=new int[TDT.TotalLogNumber]; for(int i=0;iReadTDT(iIndex,i+1,&t,pTDT[i]); } int fc=TDT.TotalLogNumber*3; //读取数据 char buf[513]; memset(buf,0,513); //int c=m_TitleField.size(); QList > data; for(int rowindex=/*m_verScrolValue*/ 0;rowindex lstData; for(int columnindex=/*m_horScrolValue*/ 0 ;columnindexCloseTDT(iIndex); delete logio; if(!ifItemWidth) for(int i = 0; i < m_pageCol; i++) m_table->setColumnWidth(i, itemWidth[/*m_horScrolValue*/ + i]); } void GridDataAdapter::updatetFMTWellLogData() { QMutexLocker locker(&m_mutex); FLOATPROPERTY vM; vM.SetSize(3); vM.m_vProperty[0]=m_SDep; vM.m_vProperty[1]=m_EDep; vM.m_vProperty[2]=m_Rlev; int pageCol=m_pageCol; if(m_pageCol>m_TitleField.size()) { m_pageCol=m_TitleField.size(); } QStringList tempFields; for(int i=0;i= m_TitleField.size()) { break; } tempFields<0) { horScrollOffset--; } if(m_PointNum>0) { vector::size_type tempVxSize = m_PointNum; if(m_pageRow>tempVxSize) { m_pageRow=tempVxSize; } setRowCount(tempVxSize); float val=0; double dep=0; int pos=0; char *vchar=(char*)m_MutiVM->m_vProperty; //m_MutiVM已在initMultWellLogData()中获取曲线信息 QList > data; int maxRowRecord=m_verScrolValue+m_pageRow; int maxColRecord=m_horScrolValue+m_pageCol; if(maxRowRecord>tempVxSize) { maxRowRecord=tempVxSize; } if(maxColRecord>m_nSamples) { maxColRecord=m_nSamples; } m_pAssetCopy->setVerScrollValue(m_verScrolValue); m_pAssetCopy->setHorScrollValue(m_horScrolValue); for(vector::size_type ix = m_verScrolValue; ix < maxRowRecord; ++ix) { dep=vM.m_vProperty[0]+ix*vM.m_vProperty[2];//cur depth QList lstData; if(m_horScrolValue==0) //The first col is depthValue { lstData<size()) val =getData(m_RepCode,(char*)&vchar[pos*m_CodeLen]); else val=-9999; lstData<size()) val =getData(m_RepCode,(char*)&vchar[pos*m_CodeLen]); else val=-9999; lstData<0) { vector::size_type tempVxSize = m_PointNum; float val=0; int pos=0; QString conTents; process.CreatProgress(0,tempVxSize,"正在导出数据..."); char *vchar=(char*)m_MutiVM->m_vProperty; for(vector::size_type ix = 0; ix < tempVxSize; ++ix) { conTents.clear(); for(int i=0;i WellLogs) { m_pWellLogs=WellLogs; for(int i = 0; i < m_pWellLogs.size(); i++){ m_pWellLogs[i]->isUsing = true; } m_dtype=type; m_pAssetCopy->SetWellLogs(type,WellLogs); m_TitleField.clear(); int a=0; //获得表格头 CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { delete logio; return ; } char name[100]; strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); int iIndex=logio->OpenTable(name); if (iIndex >=0) { a=1; int fc=logio->GetTableFieldCount(iIndex); if(fc<1) { delete logio; return; } Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[fc+1]; logio->GetTableFieldInfo(iIndex,field); for(int j=0;j3) { unit=cs[3]; } } fieldName=field[j].Name; int pos=0,pos1=0; if((pos=unit.indexOf("^"))>-1&&(pos1=unit.indexOf("^",pos+1))>-1) { QStringList fh=GetSimilarCurves(unit.mid(pos,pos1-pos+1)); if(fh.size())unit.replace(unit.mid(pos,pos1-pos+1),fh[0]); } pos=0,pos1=0; if((pos=unit.indexOf("!"))>-1&&(pos1=unit.indexOf("!",pos+1))>-1) { QStringList fh=GetSimilarCurves(unit.mid(pos,pos1-pos+1)); if(fh.size())unit.replace(unit.mid(pos,pos1-pos+1),fh[0]); } fieldName+="\n"+unit; m_TitleField.push_back(fieldName); } m_TitleField.push_back(" "); delete[] field; recordcount=logio->GetTableRecordCount(iIndex); { clearBuffer(); setRowCount(recordcount); setColCount(m_TitleField.size()); } } logio->CloseTable(iIndex); delete logio; } QString digDec(QString cs) { int index=cs.indexOf("."); if(index >= 0) { QStringList css=cs.split('e'); if(css.size() > 1) cs = css[0]; int len = cs.length(); int j=0; for(int i = len - 1; i >= index; i--) { if(cs.at(i)=='0') j++; else{ if(cs.at(i) == '.') /*j++*/j = len - (index + 1) - DECIMALPLACESNUM;//暂时都保留3位 else j = len - (index + 1) - DECIMALPLACESNUM; break; } } cs = cs.left(len - j); if(css.size() > 1) { css[0] = cs; cs = css.join("e"); } } return cs; } //刷新表格数据 void GridDataAdapter::updatetTableWellLogData() { QMutexLocker locker(&m_mutex); QStringList tempFields; if(m_pageCol>m_TitleField.size()) { m_pageCol=m_TitleField.size(); } if(m_pageRow > recordcount) { m_pageRow=recordcount; } for(int i=0;i= m_TitleField.size()) { break; } tempFields<recordcount) { maxRowRecord=recordcount; } if(maxColRecord>m_TitleField.size()) { maxColRecord=m_TitleField.size(); } //获得表格头 CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { delete logio; return ; } char name[100]; strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); int iIndex=logio->OpenTable(name); if (iIndex >=0) { int fc=logio->GetTableFieldCount(iIndex); //读取数据 char buf[513]; memset(buf,0,513); //int c=m_TitleField.size(); QList > data; for(int rowindex=/*m_verScrolValue*/ 0;rowindex lstData; for(int columnindex=/*m_horScrolValue*/ 0 ;columnindexGetTableFieldData(iIndex,columnindex,buf,rowindex+1,true); } else strcpy(buf,""); if(strlen(buf)>512) buf[512]=0; if(ty==0) { strcpy(buf,""); lstData<CloseTable(iIndex); delete logio; if(!ifItemWidth) for(int i = 0; i < m_pageCol; i++) m_table->setColumnWidth(i, itemWidth[/*m_horScrolValue*/ + i]); } //保存表格数据 void GridDataAdapter::saveTableWellLogData(bool &isScuccess) { int sRow=m_editRange.topRow(); int eRow=m_editRange.bottomRow(); int sCol=m_editRange.leftColumn(); int eCol=m_editRange.rightColumn(); int actRow=0; int actCol=0; QString textValue; //QRegExp rx("[0-9.0-9]*"); CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeReadWrite)) { delete logio; return; } int iIndex=logio->OpenTable(m_pWellLogs[0]->GetName().toStdString().c_str()); if (iIndex >=0) { int fc=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[fc+1]; logio->GetTableFieldInfo(iIndex,field); for(int r=sRow;r<=eRow;r++) { actRow=m_verScrolValue+r; for(int c=sCol;c<=eCol;c++) { actCol=m_horScrolValue+c; QTableWidgetItem* item= m_table->item(r, c); //QString mColumn =""; char buf[513]; if(NULL != item) { isScuccess=true; textValue=item->text(); if(field[actCol].RepCode==6||field[actCol].Reserved) { strcpy(buf,textValue.toStdString().c_str()); logio->SetTableFieldData(iIndex,actCol,buf,actRow+1); } else { float val=textValue.toFloat(); logio->SetTableFieldData(iIndex,actCol,(char *)&val,actRow+1); } }else { isScuccess=false; } } } logio->CloseTable(iIndex); delete[] field; } delete logio; } void GridDataAdapter::importWellLogData(QFile &importFile, DepthProgress& process) { int columns=0; int rows=0; int cindex=0; QString textValue; QString strLine=""; PFLOATPROPERTY &vM=m_pWellLogs[0]->GetMD(); //获取行列及数据 getRowsColumnsByHeader(importFile,rows,columns,strLine); QStringList colContents=strLine.split(" ",QString::KeepEmptyParts); if(colContents.size() != columns) { colContents.removeLast(); } if(colContents.size() != columns) { return; } float val=0; process.CreatProgress(0,rows,"正在导入数据..."); for(int i=0;iSetData(i,&val); } process.SetDepth(i+1); if(i+1 != rows) { strLine=importFile.readLine(); colContents=strLine.split(" ",QString::KeepEmptyParts); if(colContents.size() != columns) { colContents.removeLast(); } } } for(int i=0;iSaveToSLF(); } void GridDataAdapter::importTableWellLogData(QFile &importFile) { CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeReadWrite)) { delete logio; return; } int iIndex=logio->OpenTable(m_pWellLogs[0]->GetName().toStdString().c_str()); if (iIndex >=0) { int fc=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[fc+1]; logio->GetTableFieldInfo(iIndex,field); if(!importFile.seek(0)) { delete logio; return; } int rows; int columns; QString textValue; QString strLine=""; //获取行列及数据 if(!getRowsColumnsByHeader(importFile,rows,columns,strLine)) { delete logio; return; } QStringList colContents=strLine.split(" ",QString::KeepEmptyParts); colContents.removeLast(); rows=0; while(!importFile.atEnd()) { strLine=importFile.readLine(); colContents=strLine.split("\t",QString::KeepEmptyParts); rows++; for(int c=0;cSetTableFieldData(iIndex,c,buf,rows); } else { float val=textValue.toFloat(); logio->SetTableFieldData(iIndex,c,(char *)&val,rows); } } } logio->CloseTable(iIndex); delete[] field; } delete logio; } void GridDataAdapter::exportTableWellLogData(FILE *fp, DepthProgress& process) { //获得表格头 CLogIO *logio=new CLogIO; if(!logio->Open(m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { delete logio; return ; } char name[100]; strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); int iIndex=logio->OpenTable(name); if (iIndex >=0) { int fc=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD*pFiled=new Slf_TABLE_FIELD[fc+1]; logio->GetTableFieldInfo(iIndex,pFiled); for(int columnindex=0;columnindexGetTableFieldData(iIndex,columnindex,rowindex+1,buf); if(pFiled[columnindex].RepCode==6) { if(strlen(buf)>512) { buf[512]=0; } } if(type!=6&&type512) { buf[512]=0; } QString str(buf); if(columnindex ==m_TitleField.size()-1) { conTents += str ; } else { conTents += str + "\t"; } } fprintf(fp,"%s\n",conTents.toStdString().c_str()); process.SetDepth(rowindex+1); } delete pFiled; } logio->CloseTable(iIndex); delete logio; } bool GridDataAdapter::dataInfoHeader(CLogIO *logio,QStringList &fieldList,QString &wellName,int &rowCount) { int wellLogSize= m_pWellLogs.size(); char name[100]; QByteArray buffer; buffer.resize(100); QStringList tempFields; QString fieldName,fieldType,fieldStr; for(int i=0;iGetName().toStdString().c_str()); if(!logio->Open(m_pWellLogs[i]->GetSlfFileName().toStdString().c_str(),CLogIO::modeRead)) { return false; } int iIndex=logio->OpenTable(name); //导出头信息 if (iIndex >=0) { Slf_FILE_MESSAGE mssage; logio->GetFileMessage(mssage); wellName=mssage.WellName; if(m_dtype != D_MultWellLogData) { int fc=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[fc+1]; logio->GetTableFieldInfo(iIndex,field); const char *Rep_STR[]={ "INT","SHORT","LONG","FLOAT","DOUBLE","STRING","CHAR","UCHAR","USHORT","UINT","ULONG" }; for(int i=0;i3) { unit=cs[3]; } } int pos=0,pos1=0; if((pos=unit.indexOf("^"))>-1&&(pos1=unit.indexOf("^",pos+1))>-1) { QStringList fh=GetSimilarCurves(unit.mid(pos,pos1-pos+1)); if(fh.size())unit.replace(unit.mid(pos,pos1-pos+1),fh[0]); } pos=0,pos1=0; if((pos=unit.indexOf("!"))>-1&&(pos1=unit.indexOf("!",pos+1))>-1) { QStringList fh=GetSimilarCurves(unit.mid(pos,pos1-pos+1)); if(fh.size())unit.replace(unit.mid(pos,pos1-pos+1),fh[0]); } fieldName=field[i].Name; fieldList<CloseTable(iIndex); logio->Close(); } //获取行数 switch(m_dtype) { case D_WellData: // if(NULL != m_pWell) // { // m_pWell->LoadXYZ(); // DOUBLEPROPERTY& vX = m_pWell->GetX(); // DOUBLEPROPERTY& vY = m_pWell->GetY(); // DOUBLEPROPERTY& vZ = m_pWell->GetZ(); // if( (vX.empty() == false) && (vX.size() == vY.size()) && (vY.size()== vZ.size()) ) // { // rowCount= vX.size(); // } // m_pWell->ClearXYZ(); // } break; case D_WellLogData: { PFLOATPROPERTY &vM=m_pWellLogs[0]->GetMD(); if(vM.size()>0) { if(vP[0]->empty() == false) { rowCount = vP[0]->size(); } } } break; case D_MultWellLogData: { if(m_PointNum>0) { rowCount = m_PointNum; } } break; case D_TableWellLogData: { rowCount=recordcount; } break; default: break; } return false; } //导出数据 bool GridDataAdapter::tableToCSVFile() { char name[100]; int wellLogSize= m_pWellLogs.size(); if(wellLogSize==0) { return false; } bool isMultCure=wellLogSize>1; QString filename=m_pWellLogs[0]->GetSlfFileName().toStdString().c_str(); int a=filename.lastIndexOf("\\"); int b=filename.lastIndexOf("/"); if(b>a) a=b; if(a>-1) filename=filename.mid(a+1); a=filename.lastIndexOf("."); if(a>-1) filename=filename.left(a); QString logdata=""; if(isMultCure) { strcpy(name,filename.toStdString().c_str()); logdata=GetOutDataPath()+filename+".txt"; }else { strcpy(name,m_pWellLogs[0]->GetName().toStdString().c_str()); logdata=GetOutDataPath()+"\\"+filename+"_"+name+".txt"; } CLogIO *logio=new CLogIO; QStringList fieldList; QString wellName=""; int rowCount=0; QString dirFile = QFileDialog::getSaveFileName(m_table, ("Export File"),logdata, ("txt File(*.txt)")); FILE *fp=fopen(dirFile.toStdString().c_str(),"wt"); if(!fp) { delete logio; return false; } dataInfoHeader(logio,fieldList,wellName,rowCount); for(int i=0;ishow(); float m_popTipValue; int m_verScrolValueNew; if(m_SDep > 0 && m_Rlev > 0){ if(m_PointNum > 0){ m_verScrolValueNew = m_verScrolValue + m_pageRow * m_verScrolValue / m_PointNum; m_popTipValue = m_SDep + m_verScrolValueNew * m_Rlev; m_popTipValue = float(int(m_popTipValue * 10)) / 10; } else{ m_popTipValue = m_SDep + m_verScrolValue * m_Rlev; m_popTipValue = float(int(m_popTipValue * 10)) / 10; } m_popTip->moveCursorPoint(m_popTipValue); } else{ int offset= m_verScrolValue % m_pageRow; QTableWidgetItem *item= m_table->item(offset,0); if(NULL != item) { m_popTip->moveCursorPoint(item->text().toFloat()); } } } void GridDataAdapter::slotVerScrollBarReleased() { if(m_dtype == D_TableWellLogData|| m_dtype==D_TDTWellLogData|| m_dtype==D_FMTWellLogData) return; m_popTip->hide(); VerScrollUp = true; } void GridDataAdapter::slotHorScrollBarPressed() { VerScrollUp = false; } void GridDataAdapter::slotHorScrollBarReleased() { VerScrollUp = true; } void GridDataAdapter::setRowCount(int rowCount) { if(NULL != m_table) { //qDebug()<setRange(0,rowCount-m_pageRow); } } void GridDataAdapter::setColCount(int colCount) { if(NULL != m_table) { m_horScrolBar->setRange(0,colCount-m_pageCol+1); } } void GridDataAdapter::slotVerScrollValueChange(int nValue) { if(NULL == m_table) return; if(m_table->isVisible()) m_nVerScrollValue = nValue; m_pAssetCopy->setVerScrollValue(nValue); m_verScrolValue=nValue; valueChange(); if(m_dtype == D_TableWellLogData|| m_dtype==D_TDTWellLogData|| m_dtype==D_FMTWellLogData) return; float m_popTipValue; int m_verScrolValueNew; if(m_SDep > 0 && m_Rlev > 0){ if(m_PointNum > 0){ m_verScrolValueNew = m_verScrolValue + m_pageRow * m_verScrolValue / m_PointNum; m_popTipValue = m_SDep + m_verScrolValueNew * m_Rlev; m_popTipValue = float(int(m_popTipValue * 10)) / 10; } else{ m_popTipValue = m_SDep + m_verScrolValue * m_Rlev; m_popTipValue = float(int(m_popTipValue * 10)) / 10; } m_popTip->moveCursorPoint(m_popTipValue); if(m_dtype == D_WellLogData){ // //20210111 GZL add 联动 // QWidget* parent=qobject_cast(m_table->parent()); // QWidget* pvPage=parent->findChild("curvePreViewPage"); // int value = (m_EDep-m_popTipValue)*CurveViewVerRange/(m_EDep-m_SDep)+1; // if(value >= 0 && value <= CurveViewVerRange){ // m_mgr->CallDisplayCurveVerChange(0,fileName,curveName,pvPage,value,m_popTipValue); // m_mgr->sendTableP2Mgr(pvPage, m_verScrolBar, m_table); // } // //updateTableView(); } } else{ int offset= m_verScrolValue % m_pageRow; QTableWidgetItem *item= m_table->item(offset,0); if(NULL != item) { m_popTip->moveCursorPoint(item->text().toFloat()); } } /* if(m_pageRow<1) m_pageRow=1; int offset= nValue % m_pageRow; QTableWidgetItem *item=m_table->item(offset,0); if(item!=NULL) m_popTip->moveCursorPoint(item->text().toFloat()); */ } void GridDataAdapter::slotHorScrollValueChange(int nValue) { QMutexLocker locker(&m_mutex); if(NULL == m_table) return; if(ifItemWidth){ itemWidth = new int[m_TitleField.size()+1]; for(int i = 0; i < m_TitleField.size(); i++) itemWidth[i] = DefColWidth; ifItemWidth = false; } for(int i = 0; i < m_pageCol; i++) itemWidth[m_horScrolValue + i] = m_table->columnWidth(i); m_horScrolValue=nValue; m_pAssetCopy->setHorScrollValue(nValue); valueChange(); } //滚动刷新 void GridDataAdapter::valueChange() { if(NULL == m_table) return; VerScrollChanged = true; QFuture future; m_pComplete=NULL; switch(m_dtype) { case D_WellData: { m_pComplete=&GridDataAdapter::updateWellData; } break; case D_WellLogData: { m_pComplete=&GridDataAdapter::updatetWellLogData; } break; case D_MultWellLogData: { m_pComplete=&GridDataAdapter::updatetMultWellLogData; } break; case D_TableWellLogData: { m_pComplete=&GridDataAdapter::updatetTableWellLogData; } break; case D_TDTWellLogData: { m_pComplete=&GridDataAdapter::updatetTDTWellLogData; } break; case D_FMTWellLogData: { m_pComplete=&GridDataAdapter::updatetFMTWellLogData; } break; default: break; } // if(NULL != m_pComplete) // { // future= QtConcurrent::run(this,m_pComplete); // watcher.setFuture(future); // } } bool GridDataAdapter::eventFilter(QObject *pSender, QEvent * pEvent) { if(m_table == pSender) { if(pEvent->type()==QEvent::KeyPress) { QKeyEvent* pKeyEvent =(QKeyEvent*)pEvent; if((pKeyEvent->modifiers()&Qt::ControlModifier)!=0 && pKeyEvent->key()==Qt::Key_C) { m_pAssetCopy->onCopyData(); return true; } else if((pKeyEvent->modifiers()&Qt::ControlModifier)!=0 && pKeyEvent->key()==Qt::Key_V) { m_pAssetCopy->onParseData(); return true; } } } return false; }