#pragma warning(push,0) #include "DataHelper.h" // #include "Family.h" #include #include #include #include "InDefTableDlg.h" #include "ui_InDefTable.h" #include "CStringType.h" // #include "ObjWell.h" #include "TiShiDlg.h" #include "ui_TiShi.h" // #include "DataImport.h" #include #include #include "AdaptionComboBox.h" ////////////////////////////////////////////////////////////////////////// //#include "SigelWellCtl.h" //#include "MultWellCtl.h" #include "geometryutils.h" #include "BaseFun.h" #pragma execution_character_set("utf-8") //extern DEFAULTTABLE DefauleTable[DefTabNum]; extern DEFAULTTABLE *DefauleTable;//[DefTabNum]; extern int DefTabNum; #pragma warning(pop) // using namespace pai::ios::welllog; using namespace Ui; #define MAPPINGTABLENUM 10 #define MNUMBER 3 BEGIN_OSGGRAPHICS_NAMESPACE CInDefTableDlg::CInDefTableDlg(int curitemType,QWidget * parent, Qt::WindowFlags flags) : QDialog(parent,flags),m_sigWell(NULL),m_mutlWell(NULL) { WellNameCol=0;//1; CurItemType=curitemType; m_pUI = new Ui_InDefTable(); m_pUI->setupUi(this); m_sigWell=new SigelForm; m_mutlWell=new MultForm; m_pUI->tableWidget->setMouseTracking(true); QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave())); QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel())); QObject::connect(m_pUI->pushButtonFind, SIGNAL(clicked()), this, SLOT(slotOpenFile())); QObject::connect(m_pUI->comboBox_Table, SIGNAL(currentIndexChanged(int)),this, SLOT(changeTabletype())); QObject::connect(m_pUI->spinBox_Var,SIGNAL(valueChanged(int)),this,SLOT(slotVarLineChanged(int))); QObject::connect(m_pUI->spinBox_Data,SIGNAL(valueChanged(int)),this,SLOT(slotDataLineChanged(int))); // QObject::connect(m_pUI->pushButton_PreView, SIGNAL(clicked()), this, SLOT(slotPreView())); QObject::connect(m_pUI->checkBox_Space, SIGNAL(clicked()), this, SLOT(slotCheckSpace())); QObject::connect(m_pUI->checkBox_Comma, SIGNAL(clicked()), this, SLOT(slotCheckComma())); QObject::connect(m_pUI->checkBox_Semicolon, SIGNAL(clicked()), this, SLOT(slotCheckSem())); QObject::connect(m_pUI->checkBox_Tab, SIGNAL(clicked()), this, SLOT(slotCheckTab())); QObject::connect(m_pUI->checkBox_Spa_2, SIGNAL(clicked()), this, SLOT(slotCheckDubSpace())); QObject::connect(m_pUI->tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(slotRefreshZd(int,int))); //whp add 2020.4.20 QObject::connect(m_pUI->comboBox_DefStr,SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeDefValue())); QObject::connect(m_pUI->comboBox_DefValue,SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeDefValue())); if (!CurItemType) {setWindowTitle(" 多井离散数据导入交互界面"); m_mutlWell->setupUi(m_pUI->showWellPart); connect(m_mutlWell->pushButton_SelAll, SIGNAL(clicked()), this, SLOT(slotSelAll())); connect(m_mutlWell->pushButton_NotSelAll, SIGNAL(clicked()), this, SLOT(slotNotSelAll())); connect(m_mutlWell->pushButton_ReSel, SIGNAL(clicked()), this, SLOT(slotReverseSel())); }else { setWindowTitle(" 单井离散数据导入交互界面"); m_sigWell->setupUi(m_pUI->showWellPart); } m_pUI->lineEdit->setText(""); TableType=DefTabNum; VarLine=0;//变量名所在行 UnitLine=0;//单位所在行 DataLine=1;//数据开始行 TotalLine=0; IsSpa=IsTab=IsCom=IsSem=DelDubSpa=0; //m_pUI->okbtn->setStyleSheet("QPushButton:checked{background-color:green}"); //m_pUI->cancelbtn->setStyleSheet("QPushButton:checked{background-color:blue}"); /*this->setStyleSheet("QPushButton{background-color:black;\ color: white; border-radius: 30px; border: 3px groove gray;\ border-style: outset;}" "QPushButton:hover{background-color:red; color: white;}" "QPushButton:pressed{background-color:rgb(85, 170, 255);\ border-style: inset; }");*/ //QHeaderView* headerView = m_pUI->tableWidget->horizontalHeader(); //headerView->setHidden(true); //行名隐藏 隐藏后无法改变列宽了???? } //whp add 2020.4.20 void CInDefTableDlg::slotChangeDefValue() { int FirstCol=0; if(!CurItemType)FirstCol=1; int colIndex; int num=m_pUI->tableWidget->columnCount(); for(int col=0;coltableWidget->columnCount();col++) { if(!col&&!CurItemType)continue;// du多井时第一列是井名 QWidget *widget=m_pUI->tableWidget->cellWidget(0,col); QComboBox *combox=(QComboBox*)widget; QString ss=combox->currentText(); if(ss!="不导入")continue; for(int Row=0;RowtableWidget->rowCount();Row++) { QString DataStr; if(DefauleTable[TableType].tinfo[col-FirstCol].RepCode!=6)DataStr=m_pUI->comboBox_DefValue->currentText(); else DataStr=m_pUI->comboBox_DefStr->currentText(); m_pUI->tableWidget->setItem(Row+1,col,new QTableWidgetItem(DataStr)); } } } void CInDefTableDlg::mRefresh() { slotVarLineChanged(VarLine); slotDataLineChanged(DataLine); InitList1(); PreView(1); } void CInDefTableDlg:: slotCheckSpace(){IsSpa=!IsSpa;mRefresh();} void CInDefTableDlg:: slotCheckComma(){IsCom=!IsCom;mRefresh();} void CInDefTableDlg:: slotCheckSem(){IsSem=!IsSem;mRefresh();} void CInDefTableDlg:: slotCheckTab(){IsTab=!IsTab;mRefresh();} void CInDefTableDlg:: slotCheckDubSpace(){DelDubSpa=!DelDubSpa;mRefresh();} void CInDefTableDlg::changeTabletype() { TableType=m_pUI->comboBox_Table->currentIndex(); m_pUI->lineEdit_TableAliasName->setText(m_pUI->comboBox_Table->currentText()); if(TableType < DefTabNum) { m_pUI->lineEdit_TableName->setText(DefauleTable[TableType].TableName); m_pUI->lineEdit_des->setText(DefauleTable[TableType].TableName); } else if(TableType == DefTabNum) { m_pUI->lineEdit_TableName->setText("Custom"); m_pUI->lineEdit_des->setText(""); } else{ TableType = DefTabNum; m_pUI->comboBox_Table->setCurrentIndex(DefTabNum); m_pUI->lineEdit_TableName->setText("Custom"); m_pUI->lineEdit_des->setText(""); } PreView(0); } void CInDefTableDlg::slotSave() { if(m_pUI->lineEdit->text().isEmpty()) { AfxMessageBox("请输入文件名称"); return; } FileName = m_pUI->lineEdit->text(); //accept(); slotEnterOk(); } /** *@brief 取消槽函数 */ void CInDefTableDlg::slotCancel() { reject (); } void CInDefTableDlg::slotOpenFile() { QString DataFile = QFileDialog::getOpenFileName(NULL,"打开表数据文件",::GetDataPath(), "表数据文件(*.txt;*.prn;*.csv;*.las)"); if(DataFile=="")return; FileName=DataFile; VarLine=0;//变量名所在行 UnitLine=0;//单位所在行 DataLine=1;//数据开始行 TotalLine=0; IsSpa=IsTab=IsCom=IsSem=DelDubSpa=0; Init(); this->resize(this->size() - QSize(1,1)); this->resize(this->size() + QSize(1,1)); } void CInDefTableDlg::PreView(bool RefreshW)//RefreshW是否刷新勾选井名表格 { if(!TotalLine) return;//whp add 2020.3.6 m_pUI->tableWidget->clearContents(); if(!DataLine) return; //当前选择项是“井”,第一列是井名 int WellNum = 0; WellNameList.clear(); #pragma region 确定数据列数-->TableCol int TableCol = 0; if(TableType < DefTabNum) { TableCol = DefauleTable[TableType].ZdNum; if(!CurItemType) TableCol += 1; } else if(TableType == DefTabNum) //自定义表 { if(VarLine) TableCol = VarNameList.size(); else TableCol = VarNameList.size(); } else{ TableType = DefTabNum; if(VarLine) TableCol = VarNameList.size(); } m_pUI->tableWidget->setColumnCount(TableCol); #pragma endregion QStringList header; if(!CurItemType) header << "井名"; #pragma region 字段名-->tableWidget if(TableType < DefTabNum) { for(int i = 0; i < DefauleTable[TableType].ZdNum; i++) header << QString(QLatin1String(DefauleTable[TableType].tinfo[i].Name)); } else { if(!CurItemType) for(int i = 1; i < VarNameList.size(); i++) header << VarNameList.at(i); else for(int i = 0; i < VarNameList.size(); i++) header << VarNameList.at(i); } m_pUI->tableWidget->setHorizontalHeaderLabels(header); #pragma endregion if(TableTypetableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch); else m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); } else { m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); } m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); #pragma region 生成comboBox内容-->header header.clear(); int len=DataList.size(); if(VarLine) //若已发现数据中的字段名,生成带有字段名的header { for(int i = 0; i < VarNameList.size(); i++) header << "第" + QString::number(i + 1) + "列:" + VarNameList[i]; len = VarNameList.size(); } else //若没有发现字段名,根据数据列数生成非字段名的header for(int i = 0; i < DataList.size(); i++) header << "第" + QString::number(i + 1) + "列";//QString::number(i+1); //whp add 2020.1.8 header<<"不导入"; //额外情况 //whp change 2020.3.6 //m_pUI->tableWidget->setRowCount(TotalLine-DataLine+1+1); //2020.8.2 for刷新慢 #pragma endregion #pragma region 设置table行数 int LineNum = MapData.count(); //数据行数 //if(MapData.count()>=100)LineNum=100; m_pUI->tableWidget->setRowCount(LineNum);//MapData.count()+1); #pragma endregion int FirstCol = 0; if(!CurItemType) FirstCol = 1; //首行为字段选择行 #pragma region 初次生成首行的选择框, for(int i = 0; i < TableCol; i++) { AdaptionComboBox *comboBox = new AdaptionComboBox(); //comboBox->setEditable(true); comboBox->addItems( header ); //每个选择框中的内容相同 if(!i && !CurItemType) //首列且是“井” { comboBox->setCurrentIndex(WellNameCol); //指向井名列 } else { int sel = VarNameList.size(); //先指向“不导入” if(TableType == DefTabNum) //按实际数据字段列顺序即可 sel = i; #pragma region 确定该字段是数据中的哪一列(从0开始) else { QString name = QString(QLatin1String(DefauleTable[TableType].tinfo[i-FirstCol].Name)); for(int m = 0; m < VarNameList.size(); m++) { if(VarNameList[m].toUpper() == name.toUpper()) { sel = m; break; } } } #pragma endregion comboBox->setCurrentIndex(sel); //确定初始选择框中的默认内容 } //信槽链接——当前值改变——》slotComboxSelectChange(int) connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComboxSelectChange(int))); comboBox->setProperty("row", 0); comboBox->setProperty("col", i); m_pUI->tableWidget->setCellWidget( 0, i, comboBox ); //slotRefreshZd(0,i);//whp add 2020.1.8 } #pragma endregion //whp change 2020.1.8 int colIndex; #pragma region 将数值填入 for(int Row = 0; Row < LineNum; Row++) //遍历每行数据 { QStringList List = MapData.find(Row).value(); QString DataStr; for(int i = 0; i < TableCol; i++) { if(!i && !CurItemType) //井的第0列是井名 { colIndex=WellNameCol; } #pragma region 确定该字段是数据中的哪一列(从0开始)--> colIndex else { int sel = VarNameList.size(); //不导入 if(TableType == DefTabNum) sel = i; else { QString name = QString(QLatin1String(DefauleTable[TableType].tinfo[i - FirstCol].Name)); for(int m = 0; m < VarNameList.size(); m++) { if(VarNameList[m].toUpper() == name.toUpper()) { sel=m; break; } } } colIndex=sel; } #pragma endregion #pragma region 提取该行该列值 if(colIndex>=0&&colIndex < List.size()) DataStr = List[colIndex]; else { if(TableType==DefTabNum) DataStr=""; else{ if(DefauleTable[TableType].tinfo[i-FirstCol].RepCode != 6) DataStr = m_pUI->comboBox_DefValue->currentText(); else DataStr = m_pUI->comboBox_DefStr->currentText(); } } m_pUI->tableWidget->setItem( Row+1, i, new QTableWidgetItem(DataStr)); #pragma endregion } } #pragma endregion #pragma region 井名处理 if(RefreshW && !CurItemType)//当前选择项是“井”时,显示所有井名 { //统计所有井名 /*int num=Mm_pUI->tableWidget->rowCount();//3.6 for(int i=1;itableWidget->rowCount();i++) { bool flag=0; QString DataStr=List[WellNameCol];//m_pUI->tableWidget->item(i,0)->text(); for(int j=0;jtableWidget->item(i,0)->text(); for(int j=0;jtableWidget_WellName->clearContents(); m_mutlWell->tableWidget_WellName->setColumnCount(1); QStringList header; header<<"导入井名"; m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header); m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true); m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size()); for(int i=0;itableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i))); m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked); } } #pragma endregion } void CInDefTableDlg::slotVarLineChanged(int LineNo)//变量名所在行 { VarLine=LineNo; QFile file(FileName); if(!file.open(QIODevice::ReadOnly )) { AfxMessageBox("文件无法打开!"); return; } char*pLine=new char[5000]; //略过变量名行前的行 for(int i=0;i= 0) //数据中有该字段 num++; } if(num == DefauleTable[i].ZdNum) //该表类型符合当前数据文件 { TableType = i; m_pUI->comboBox_Table->setCurrentIndex(i); //修改窗口的表类型显示 break; } } #pragma endregion if(CurItemType==0) for(int i=0;i=0) { WellNameCol=i;//+1; break; } } file.close(); InitList1(); PreView(1); delete pLine; } void CInDefTableDlg::slotDataLineChanged(int LineNo)//数据开始行 { DataLine=LineNo; QFile file(FileName); file.open(QIODevice::ReadOnly ); char*pLine=new char[5000]; for(int i=0;ishowWellPart->setLayout(hboxLayout); QFile file(FileName); file.open(QIODevice::ReadOnly ); int Row=0; char*pLine=new char[5000]; QByteArray line, line1 = ""; #pragma region 自动判断需要使用的分隔符并打钩 int DubTab=-1,DubSem=-1,DubCom=-1,DubSpa=-1;//是否有连续的Tab、逗号、分号和空格 int Tab=-1,Sem=-1,Com=-1,Spa=-1;//是否有Tab、逗号、分号和空格分隔符 while(!file.atEnd()) { file.readLine(pLine,5000); { char *p=strstr(pLine,"\r\n"); if(p) *p='\0'; } line = pLine; if(Row<100) //仅仅检查前100行是否有连续空格、单空格、Tab、逗号、分号 { //if(DubTab<0)DubTab=line.indexOf(" "); //if(DubSem<0)DubSem=line.indexOf(";;"); //if(DubCom<0)DubCom=line.indexOf(",,"); if(DubSpa<0)DubSpa=line.indexOf(" "); if(Tab<0)Tab=line.indexOf(" "); if(Sem<0)Sem=line.indexOf(";"); if(Com<0)Com=line.indexOf(","); if(Spa<0)Spa=line.indexOf(" "); } //m_pUI->textEdit->append("Line "+QString::number(Row+1)+":"+line); Row++; }//分隔符选择框 if(Tab>=0){ IsTab=1; m_pUI->checkBox_Tab->setChecked(IsTab); } if(Sem>=0){ IsSem=1; m_pUI->checkBox_Semicolon->setChecked(IsSem); } if(Com>=0){ IsCom=1; m_pUI->checkBox_Comma->setChecked(IsCom); } if(Spa>=0){ IsSpa=1; m_pUI->checkBox_Space->setChecked(IsSpa); } if(DubSpa>=0){ DelDubSpa=1; m_pUI->checkBox_Spa_2->setChecked(DelDubSpa); } #pragma endregion m_pUI->spinBox_Var->setMinimum(0);m_pUI->spinBox_Var->setMaximum(Row); m_pUI->spinBox_Data->setMinimum(0);m_pUI->spinBox_Data->setMaximum(Row); m_pUI->comboBox_DefValue->addItem("-99999."); m_pUI->comboBox_DefValue->addItem("-9999."); m_pUI->comboBox_DefValue->addItem("-999.25"); m_pUI->comboBox_DefValue->addItem("-32767"); m_pUI->comboBox_DefValue->addItem("0");//whp add 2020.4.9 m_pUI->comboBox_DefStr->addItem(""); m_pUI->comboBox_DefStr->addItem("NULL"); m_pUI->comboBox_DefStr->addItem("NONE"); //初步判断变量行和数据行 file.seek(0); int pos=Row; if(Row > 20) pos = Row - 1;//尽量避开尾部空行********************************* MaxRow = pos; //总行数 #pragma region 记录最大列数 for(int i = 0; i < pos; i++) { file.readLine(pLine,50000); { char *p=strstr(pLine,"\r\n"); if(p) *p='\0'; } QByteArray line=pLine; DataList=GetStringList(line, IsSpa, IsTab, IsCom, IsSem, DelDubSpa); if(DataList.size() < 2)continue; //数据量过少的直接抛弃********************* line1 = line; if(MaxCol < DataList.size()) MaxCol = DataList.size(); //重置最大列数,初始为0 } if(MaxCol==0) { QMessageBox::warning(NULL,"错误"," 无法识别数据文件:\r\n"+FileName); file.close(); delete pLine; return 0; } #pragma endregion //保存末行的列数,暂且作为数据列数 DataList = GetStringList(line1,IsSpa,IsTab,IsCom,IsSem,DelDubSpa);//line.split(",");//取数据行 int VarNum=DataList.size(); //if(MaxColspinBox_Var->setValue(VarLine); m_pUI->spinBox_Data->setValue(DataLine); slotVarLineChanged(VarLine); TotalLine=Row; if(VarLine || DataLine) { InitList1(); PreView(1); } return 1; } //处理上面的table void CInDefTableDlg::InitList1() { if(!TotalLine) return;//whp add 2020.3.6 int ZdNum; if(VarLine)//字段名行数 ZdNum = VarNameList.size(); //列数(字段数) else { if(VarNameList.size()>DataList.size()) ZdNum=VarNameList.size(); else ZdNum = DataList.size(); } if(ZdNum <= 0) return; MapData.clear(); m_pUI->tableWidget_1->clearContents(); m_pUI->tableWidget_1->setColumnCount(MaxCol);//设置表格最大列数:MaxCol 最大列数, tableWidget->setRowCount(10);是设置行数 QStringList header; for(int i = 0; i < MaxCol; i++)//for(int i=0;i= ZdNum) //不确定该列的字段名 header << "第" + QString::number(i+1) + "列"; else header << "第" + QString::number(i+1) + "列\r\n" + VarNameList.at(i); } m_pUI->tableWidget_1->setHorizontalHeaderLabels(header); //设置表头 m_pUI->tableWidget_1->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); QFile file(FileName); file.open(QIODevice::ReadOnly ); m_pUI->tableWidget_1->setRowCount(MaxRow + 10); //设置行数,10行作为额外行 int Row = 0, row = 0; //row:记录当前待处理行 QByteArray line; char*pLine=new char[5000]; //所有行遍历开始 while(!file.atEnd()) { file.readLine(pLine,50000); { char *p=strstr(pLine,"\r\n"); if(p) *p='\0'; } line=pLine; #pragma region 将该行内容写入tableWidget_1 QStringList List = GetStringList(line,IsSpa,IsTab,IsCom,IsSem,DelDubSpa); QString DataStr; //if(row<100) //2020.8.2 for刷新慢 { for(int i = 0; i < MaxCol; i++) { if(i < List.size()) DataStr = List[i]; else DataStr=""; //将new QTableWidgetItem(DataStr)作为一个元素值放入对应位置(row行,i列) m_pUI->tableWidget_1->setItem(row, i, new QTableWidgetItem(DataStr));//List[colIndex[i]])); } } #pragma endregion row++; #pragma region 如果是空行就不用再判断是不是数据行了 QString sss; bool IsNullLine = 1; for(int kk = 0; kk < List.size(); kk++) { sss = List.at(kk); if(sss != ""){ IsNullLine = 0; break; } } if(IsNullLine) continue; #pragma endregion #pragma region 将数据行内容写入MapData //m_pUI->tableWidget_1->setRowCount(Row+1); if(Row >= DataLine - 1) //DataLine是实际行数,因此要减1, 判断当前处理行是否属于数据行 MapData.insert(Row - (DataLine - 1), List);//MapData.insert(Row,List);whp change 2020.5.21 #pragma endregion Row++; }//while(!textstream.atEnd()) delete pLine; //2020.8.2 for刷新慢 m_pUI->tableWidget_1->setRowCount(row); //重置table行数 //if(row>=100)m_pUI->tableWidget_1->setRowCount(100); file.close(); if(!CurItemType) { /* m_pUI->comboBox_WellName->clear(); for(int i=0;icomboBox_WellName->addItem("第"+QString::number(i+1)+"列"); m_pUI->comboBox_WellName->setCurrentIndex(0);*/ } } BOOL CInDefTableDlg::mIsNumber(QString str)//判断字符串是否为数值 { QByteArray ba = str.toLatin1();//QString 转换为 char* const char *buf = ba.data(); int len=strlen(str.toStdString().c_str());//str.length();//whp change 2020.3.16 int dig[30]; int DotNum=0;//小数点个数 BOOL IsDigital=1; for(int i=0;i1){IsDigital=0;break;} } if(!IsDigital)return 0;//字符串0 else return 1;//是数值 } void CInDefTableDlg::slotRefreshZd(int row,int col) { //刷新当前字段内容 if(row)return; QWidget *widget=m_pUI->tableWidget->cellWidget(row,col); QComboBox *combox=(QComboBox*)widget; int colIndex=combox->currentIndex(); int FirstCol=0; if(!CurItemType)FirstCol=1; for(int Row=0;Row=0&&colIndexcomboBox_DefValue->currentText(); else DataStr=m_pUI->comboBox_DefStr->currentText(); } m_pUI->tableWidget->setItem(Row+1,col,new QTableWidgetItem(DataStr));//List[colIndex[i]])); if(!CurItemType)//当前选择项是“井”时,统计所有井名 { if(col==0) { bool flag=0; DataStr=DataStr.toUpper(); for(int j=0;jtableWidget_WellName->clearContents(); m_mutlWell->tableWidget_WellName->setColumnCount(1); QStringList header; header<<"井名"; m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header); m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true); m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size()); for(int i=0;itableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i))); m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked); } } } void CInDefTableDlg::slotSelAll() { for(int i=0;itableWidget_WellName->item(i,0)->setCheckState(Qt::Checked); } void CInDefTableDlg::slotNotSelAll() { for(int i=0;itableWidget_WellName->item(i,0)->setCheckState(Qt::Unchecked); } //mult well void CInDefTableDlg::slotReverseSel() { ////////////////////////////////////////////////////////////////////////// for(int i=0;itableWidget_WellName->item(i,0)->checkState(); if (eState==Qt::Checked)m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Unchecked); else m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked); } } void CInDefTableDlg::slotEnterOk() { int ResultCol2; int ResultCol[10] = {-1}; int ResultCol2Map[10] = {-1}; int SpColNum = 0; bool TranResult = 0; QStringList tempList; QStringList ResultList; map ResultMap; //文字, 数值 map GujingMap; map CoreOilMap; map CoreLithMap; map CorecolorMap; int mappingTable[MAPPINGTABLENUM] = {0}; #pragma region 加载需要的映射表 if(TableType < DefTabNum) { //为了多表部分可以运行,暂时留着 if(DefauleTable[TableType].TableName == "RESULT") { #pragma region RESULT解释结论表类型 #pragma region 确定result字段所在列数+提取该列comboBox combox if(CurItemType) //非“井” ResultCol2 = 4; else ResultCol2 = 5; QWidget *widget = m_pUI->tableWidget->cellWidget(0, ResultCol2); QComboBox *combox = (QComboBox*)widget; #pragma endregion if(combox->currentText() != "不导入") { #pragma region TranResult标签值 for(int i = 1; i < m_pUI->tableWidget->rowCount(); i++) { QString str = m_pUI->tableWidget->item(i, ResultCol2)->text(); if(DataHelper::StrType(str) == 6)//结论列是文字结论,需要转换(6:文字结论, 4:浮点数, 1:整型) { TranResult = 1; break; } } #pragma endregion if(TranResult) { #pragma region 打开RESULT.ini文件并传入 ResultList QString ConfigName = ::GetConfPath() + "RESULT.ini"; QFile InFile3(ConfigName); if( !InFile3.open(QIODevice::ReadOnly ) ) { QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigName + "错误"); } else { QTextStream textstream3( &InFile3 ); QString line; while(!textstream3.atEnd()) { line = textstream3.readLine(); if(line.length() <= 1) continue; ResultList.append(line); } InFile3.close(); } #pragma endregion } } #pragma endregion } //20201126 GZL change for(int zdc = 0; zdc < DefauleTable[TableType].ZdNum; zdc++) { QStringList ress; ress.append(QString(DefauleTable[TableType].tinfo[zdc].Reserved)); if(ress[0].toFloat() < 1) continue; #pragma region 记录特殊字段所在列(标准表中的列数) if(CurItemType) //非“井” ResultCol[SpColNum] = zdc; else ResultCol[SpColNum] = zdc + 1; #pragma endregion int n; QString mapName; foreach(QString res, ress){ n = res.toInt() - 1; if(n >= 0) ResultCol2Map[SpColNum++] = n + 1; if(n >= 0 && !mappingTable[n]){ //当前未加载该maptable #pragma region 加载所需maptable mappingTable[n] = n + 1; switch(mappingTable[n]){ case 1: mapName = "RESULT"; break; case 2: mapName = "GujingOrder"; break; case 3: mapName = "CoreOil"; break; case 4: case 7: mapName = "CoreLith"; break; case 5: mapName = "Corecolor"; break; } #pragma region 打开映射文件 QString ConfigMapName = ::GetConfPath() + mapName + ".ini"; QFile InFile(ConfigMapName); if( !InFile.open(QIODevice::ReadOnly ) ) { QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigMapName + "错误"); } QString ConfigMapName2; if(mapName == "Corecolor") ConfigMapName2 = ::GetConfPath() + "colorind.ini"; else ConfigMapName2 = ::GetConfPath() + mapName + "ind.ini"; QFile InFile2(ConfigMapName2); if( !InFile2.open(QIODevice::ReadOnly ) ) { QMessageBox::warning(NULL, "提示", "打开解释结论配置文件" + ConfigMapName2 + "错误"); } #pragma endregion QTextStream textstream( &InFile ); QString line; tempList.clear(); while(!textstream.atEnd()) { line = textstream.readLine(); if(line.length() < 1) continue; tempList.append(line); } InFile.close(); QTextStream textstream2( &InFile2 ); int linekeyNum = 0; while(!textstream2.atEnd()) { line = textstream2.readLine(); if(line == "") continue; if(linekeyNum >= tempList.count()){ QMessageBox::warning(NULL, "提示", "配置文件" + mapName + "ind.ini可能出错,请查看并修改"); break; } switch(mappingTable[n]){ case 1:ResultMap.insert(pair(tempList[linekeyNum++], line));break; case 2:GujingMap.insert(pair(tempList[linekeyNum++], line));break; case 3:CoreOilMap.insert(pair(tempList[linekeyNum++], line));break; case 4: case 7: CoreLithMap.insert(pair(tempList[linekeyNum++], line)); break; case 5:CorecolorMap.insert(pair(tempList[linekeyNum++], line));break; } } InFile2.close(); #pragma endregion } } } } #pragma endregion { int ColNum; #pragma region 单井导入 if(CurItemType) { if(TableType < DefTabNum) ColNum = DefauleTable[TableType].ZdNum; else ColNum = VarNameList.count(); CLogIO *logio = new CLogIO(); if(!logio->Open(WellFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; QMessageBox::warning(NULL,"提示","打开文件"+WellFileName+"错误\r\n无法导入数据表"); //MapData.clear(); return ; } QString TableName = m_pUI->lineEdit_TableName->text(); char tn[100]; strcpy(tn, TableName.toStdString().c_str()); int iIndex = logio->OpenTable(tn); if(iIndex >= 0) {//whp 2019.12.28 添加"放弃"选项 #pragma region 已有重名table情况 QMessageBox box(QMessageBox::Warning, "提示","数据表" + TableName + "已存在\r\n是否继续导入?"); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel|QMessageBox::Ignore); box.setButtonText (QMessageBox::Yes,QString("合并")); box.setButtonText (QMessageBox::No,QString("另存"));//替换 box.setButtonText (QMessageBox::Cancel,QString("放弃"));//另存 box.setButtonText (QMessageBox::Ignore,QString("替换"));//放弃 int flag1 =box.exec (); if(flag1 == QMessageBox::No)//另存Cancel { while(1) { TableName += "NEW"; if(strlen(TableName.toStdString().c_str()) > 64)//if(TableName.length()>64)//whp change 2020.3.16 { QMessageBox::warning(NULL,"提 示","数据表名" + TableName + "过长\r\n无法导入"); //MapData.clear(); delete logio; return; } if(logio->FindSlfObjectIndex(TableName.toStdString().c_str(),0)<0)break; } strcpy(tn,TableName.toStdString().c_str()); logio->CloseTable(iIndex); iIndex=-1; } else if(flag1==QMessageBox::Ignore){ logio->DeleteSlfObject(tn); iIndex = -1; }//覆盖 else if(flag1==QMessageBox::Yes)//合并 { if(logio->GetTableFieldCount(iIndex) != ColNum)//DefauleTable[TableType].ZdNum) { int flag = QMessageBox::warning(this,tr("警告"), "数据表"+WellFileName+"已存在\r\n但与要导入的表数据字段数不一致,是否替换掉原数据表,重新生成新表",QMessageBox::Yes,QMessageBox::No); if(flag == QMessageBox::Yes) { logio->DeleteSlfObject(tn);iIndex=-1; } else { AfxMessageBox("放弃导入"); logio->CloseTable(iIndex); delete logio; return; } } } else //if(flag1==QMessageBox::Cancel)//放弃Ignore { logio->CloseTable(iIndex); delete logio; AfxMessageBox("放弃导入");//"数据表导入失败"); return; } #pragma endregion } if (iIndex < 0) { #pragma region 没有重名情况 QString name, len, ty, bk, hz,unit,hunit; if(TableType < DefTabNum) { #pragma region 标准表 ColNum = DefauleTable[TableType].ZdNum; for(int i = 0; i < DefauleTable[TableType].ZdNum; i++) //遍历该table所有字段 { name +=DefauleTable[TableType].tinfo[i].Name; len += QString::number(DefauleTable[TableType].tinfo[i].CodeLength);//Length); ty += QString::number(DefauleTable[TableType].tinfo[i].RepCode); bk += QString(DefauleTable[TableType].tinfo[i].Reserved).toInt()>0?DefauleTable[TableType].tinfo[i].Reserved:"0"; hz +=DefauleTable[TableType].tinfo[i].HZName; if(stricmp(DefauleTable[TableType].tinfo[i].Unit,"NONE")==0) { unit +=""; } else unit +=DefauleTable[TableType].tinfo[i].Unit; hunit +=DefauleTable[TableType].tinfo[i].HZUnit; if(i < DefauleTable[TableType].ZdNum - 1) { name+=","; len+=","; ty+=","; bk+=","; hz+=","; unit+=","; hunit+=","; } } #pragma endregion } else { #pragma region 非标准表 ColNum=VarNameList.count(); int *FieldType=new int[ColNum]; for(int i=0;iOpen_Set_Table(tn, 0, ColNum, cname, clen,//字段长度 cty,//字段类型 cbk, chz, cunit, chunit );//字段备注 //} #pragma endregion } int rec = logio->GetTableRecordCount(iIndex); int tcount = logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1]; if(!logio->GetTableFieldInfo(iIndex, field)) { delete field; delete logio; return; } int reclen=logio->GetTableRecordLength(iIndex); char *Buffer=new char[reclen+1]; int *colIndex=new int[tcount];//DefauleTable[TableType].ZdNum];//数据列序号 #pragma region 获取每个comboBox的index colIndex for(int i=0;itableWidget->cellWidget(0,i); QComboBox *combox=(QComboBox*)widget; colIndex[i]=combox->currentIndex(); } #pragma endregion QString DESTinf; for(int Row = 0; Row < MapData.count(); Row++) //行 { QStringList List = MapData.find(Row).value(); //第Row行的所有数据——》List QString DataStr; int len = 0; bool isSp = 0; DESTinf = ""; for(int i = 0; i < tcount/*DefauleTable[TableType].ZdNum*/; i++) //列 { #pragma region 获取该行该列值 DataStr if(colIndex[i]>=0&&colIndex[i] < List.size()) //从实际数据中提取值 DataStr DataStr = List[colIndex[i]]; else //使用默认值DataStr { if(field[i].RepCode != 6) DataStr = m_pUI->comboBox_DefValue->currentText(); else DataStr = m_pUI->comboBox_DefStr->currentText(); } #pragma endregion if(TableTypecomboBox_DefStr->currentText() ) DataStr = DataStr + DESTinf; #pragma region 文字转换 if(field[i].RepCode != 6) { #pragma region 20201126 GZL delete //将RESULT列中的文字转换为对应数字 /* if(TranResult && i == ResultCol)//TranResult:结论列是文字结论,需要转换; ResultCol:RESULT字段所在列 { //文字转数字 int no = ResultList.indexOf(DataStr) + 1; DataStr = QString::number(no); //替换DataStr值为对应数字 } float buf = DataStr.toFloat(); */ #pragma endregion //20201126 GZL change #pragma region 将该特殊列进行数值映射 int spn; //记录是第几个特殊字段 for(spn = 0; spn < SpColNum; spn++){ //SpColNum记录当前特殊字段 if(i == ResultCol[spn]){ isSp = 1; break; } } if(DataHelper::StrType(DataStr) == 6 && isSp){ //需要映射 #pragma region 保留文字信息,为DEST字段做备份 DESTinf = DESTinf + DataStr; #pragma endregion switch(ResultCol2Map[spn]){ case 1:{ #pragma region 拆分上中下 QStringList vals; QStringList val1=DataStr.split("上"); vals.append(val1); val1.clear(); vals.removeAll(""); for(int i=0;i 1){ for(int j = 0; j < vals.size(); j++) { #pragma region 不满足组合结论要求 if(ResultMap[vals[j]].toFloat() >= 10){ logio->CloseTable(iIndex); delete logio; delete []Buffer; delete []field; delete []colIndex; AfxMessageBox("该结论需不满足组合结论要求,请分开存放");//"数据表导入失败"); return; } #pragma endregion DataStr.append(ResultMap[vals[j]]); } break; } else{ DataStr.append(ResultMap[vals[0]]); break; } } case 2:DataStr = GujingMap[DataStr];break; case 3:DataStr = CoreOilMap[DataStr];break; case 4: case 7: DataStr = CoreLithMap[DataStr]; break; case 5:DataStr = CorecolorMap[DataStr];break; } } float buf = DataStr.toFloat(); logio->SetData(field[i].RepCode, &Buffer[len], (float *)&buf); #pragma endregion isSp = 0; } #pragma endregion else strncpy(&Buffer[len], DataStr.toStdString().c_str(), field[i].Length); len += field[i].Length; } logio->WriteTable(iIndex, Row + rec + 1, Buffer); } //if(lineNo>rec) rec=lineNo; logio->SetTableRecordCount(iIndex, MapData.count() + rec); delete []Buffer; delete []field; delete []colIndex; logio->CloseTable(iIndex); delete logio; QMessageBox::information(NULL,"标题","数据表导入123完"); // CDataImport::ChangetoSlf(WellFileName,NULL); //MapData.clear(); return; } #pragma endregion #pragma region 多井导入 #pragma region 获取勾选的井名 QStringList WellNameList; if(TableTypetableWidget_WellName->rowCount();i++) { if(m_mutlWell->tableWidget_WellName->item(i,0)->checkState()) { QString name=m_mutlWell->tableWidget_WellName->item(i,0)->text().toUpper(); if(name==""){ QMessageBox::warning(NULL,"提示","井名不能为空"); return; } if(IsValidWellName(name)==0){ QMessageBox::warning(NULL,"提示","'"+name+"'不符合井名命名规则"); return; } WellNameList.append(name); } } #pragma endregion 获取勾选的井名 #pragma region 检查数据表是否存在 std::vector wellNameVec; std::vector wellFileNameVec; std::vector tableExist;//表是否存在 std::vector mode;//写入方式:0-替换,1-合并,2-另存 QString TableName=m_pUI->lineEdit_TableName->text(); std::vector wellIndex;//已经存在有数据表的井序号 int WellNum=0; // for(int i=0;iGetWellFileName().isEmpty()) // { // QString fi=GetLogdataPath()+GetProject()->GetName()+"\\#"+WellNameList.at(i); // CreateDir((char *)fi.toStdString().c_str()); // fi+="\\"+WellNameList.at(i)+".slf"; // pWell->SetWellFileName(fi); // CLogIO *logio=new CLogIO(); // //logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate); // logio->Open(fi.toStdString().c_str(),CSlfIO::modeCreate,1024,1024,MACHINE_TYPE,0); // Slf_FILE_MESSAGE mssage; // logio->GetFileMessage(mssage); // int len=strlen(WellNameList.at(i).toStdString().c_str()); // strncpy(mssage.WellName,WellNameList.at(i).toStdString().c_str(),len); // mssage.WellName[len]=0; // logio->SetFileMessage(mssage); // tableExist.push_back(0); // delete logio; // } // else // { // QString fi=pWell->GetWellFileName(); // CLogIO *logio=new CLogIO(); // if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite)) // //if(logio->Open(fi.toStdString().c_str(),CSlfIO::modeReadWrite,1024,1024,MACHINE_TYPE,0)) // { // int iIndex=logio->OpenTable(TableName.toStdString().c_str()); // if(iIndex<0)tableExist.push_back(0); // else // { // tableExist.push_back(1); // wellIndex.push_back(WellNum); // logio->CloseTable(iIndex); // } // delete logio; // } // } // wellFileNameVec.push_back(pWell->GetWellFileName()); // WellNum++; // } #pragma endregion 检查数据表是否存在 #pragma region 提示已存在的数据表处理方式 int n=wellIndex.size(); if(wellIndex.size()==1) { QString mes=wellNameVec[wellIndex[0]]+"井中已经存在数据表"+TableName+"\r\n请选择导入方式"; QMessageBox box(QMessageBox::Warning,"提示",mes); box.setStandardButtons (QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel); box.setButtonText (QMessageBox::Yes,QString("合并")); box.setButtonText (QMessageBox::No,QString("替换")); box.setButtonText (QMessageBox::Cancel,QString("另存")); int flag1 =box.exec (); if(flag1==QMessageBox::Cancel)//另存 { mode[wellIndex[0]]=2; } else if(flag1==QMessageBox::No)mode[wellIndex[0]]=0;//替换 else//合并 { mode[wellIndex[0]]=1; } } else if(wellIndex.size()>1) { CTiShiDlg *pTishiDlg=new CTiShiDlg(NULL); for(int i=0;inamelist.append(wellNameVec[wellIndex[i]]); pTishiDlg->init(); } if(pTishiDlg->exec()==QDialog::Accepted) { for(int i = 0;im_pUI->tableWidget->rowCount ();i++) { for(int j = 1;jm_pUI->tableWidget->columnCount ();j++) { if(pTishiDlg->m_pUI->tableWidget->item (i,j)->checkState ()==Qt::Checked) { mode[wellIndex[i]]=j-1;break; } } } } else { //MapData.clear(); QMessageBox::warning(NULL,"提示","放弃数据表导入"); return; } } #pragma endregion 提示已存在的数据表处理方式 #pragma region 导入数据表 //获取井名列号 QWidget *widget=m_pUI->tableWidget->cellWidget(0,0);//第一列是井名 QComboBox *combox=(QComboBox*)widget; int colIndex_wellname=combox->currentIndex(); //获取数据表字段对应列号 int *colIndex=new int[ColNum];//DefauleTable[TableType].ZdNum];//数据列序号 for(int i=0;itableWidget->cellWidget(0,i+1);//第一列是井名 QComboBox *combox=(QComboBox*)widget; colIndex[i]=combox->currentIndex(); } QString mTableName=TableName; int FailedNum=0; for(int i=0;iOpen(fi.toStdString().c_str(),CSlfIO::modeReadWrite); int iIndex=logio->OpenTable(TableName.toStdString().c_str()); if(iIndex>=0)//表存在 { if(mode[i]==0)//替换 { logio->DeleteSlfObject(TableName.toStdString().c_str()); iIndex=-1; } else if(mode[i]==2)//另存 { while(1) { TableName+="NEW"; if(strlen(TableName.toStdString().c_str())>64)//if(TableName.length()>64)//whp change 2020.3.16 { QMessageBox::warning(NULL,"提 示","数据表名"+TableName+"过长\r\n无法导入"); //MapData.clear(); delete logio; return; } if(logio->FindSlfObjectIndex(TableName.toStdString().c_str(),0)<0)break; } logio->CloseTable(iIndex); iIndex=-1; } else if(mode[i]==3)//放弃导入 { FailedNum++; logio->CloseTable(iIndex); iIndex=-1; continue; } } if (iIndex < 0) { QString name,len,ty,bk,hz; if(TableTypeOpen_Set_Table(TableName.toStdString().c_str(),0,ColNum-1,//DefauleTable[TableType].ZdNum, cname, clen,//字段长度 cty,//字段类型 cbk, chz );//字段备注 } int rec=logio->GetTableRecordCount(iIndex); int tcount=logio->GetTableFieldCount(iIndex); Slf_TABLE_FIELD *field=new Slf_TABLE_FIELD[tcount+1]; logio->GetTableFieldInfo(iIndex,field); int reclen=logio->GetTableRecordLength(iIndex); char *Buffer=new char[reclen+1]; int lineNo=0; for(int Row=0;Row=0&&colIndex[i]comboBox_DefValue->currentText(); else DataStr=m_pUI->comboBox_DefStr->currentText(); } if(field[i].RepCode!=6) { if(TranResult&&i==ResultCol2-1) { int no=ResultList.indexOf(DataStr)+1; DataStr=QString::number(no); } float buf=DataStr.toFloat(); logio->SetData(field[i].RepCode,&Buffer[len],(float *)&buf); } else { strncpy(&Buffer[len],DataStr.toStdString().c_str(),field[i].Length); } len+=field[i].Length; } logio->WriteTable(iIndex,lineNo+rec+1,Buffer); lineNo++; } //if(lineNo>rec) rec=lineNo; logio->SetTableRecordCount(iIndex,lineNo+rec); delete []Buffer; delete []field; logio->CloseTable(iIndex); delete logio; // CDataImport::ChangetoSlf(wellFileNameVec[i],NULL); } QString mes="多井数据表导入成功\r\n共有"+QString::number(wellNameVec.size()-FailedNum)+"口井成功导入数据表"+mTableName; QMessageBox::warning(this,tr("提示"),mes); delete []colIndex; #pragma endregion #pragma endregion } //MapData.clear(); #pragma region 王专家上中下样例 #pragma endregion } //comboBox change void CInDefTableDlg::slotComboxSelectChange(int index) { if(! m_pUI->tableWidget->isActiveWindow()) return; //刷新当前字段内容 //QWidget *widget=m_pUI->tableWidget->cellWidget(row,col); QComboBox *combox = (QComboBox*)sender(); int row = combox->property("row").toInt(); int col = combox->property("col").toInt(); int colIndex = index; if(!CurItemType && col == 0) WellNameList.clear();//whp add 2020.3.6 for(int Row = 0; Row < MapData.count(); Row++) { QStringList List = MapData.find(Row).value(); QString DataStr; int FirstCol = 0; if(!CurItemType) FirstCol = 1; if(colIndex>=0&&colIndex < List.size()) DataStr = List[colIndex]; else { if(TableTypecomboBox_DefValue->currentText(); else DataStr = m_pUI->comboBox_DefStr->currentText(); } m_pUI->tableWidget->setItem(Row+1, col, new QTableWidgetItem(DataStr)); if(!CurItemType && col == 0)//当前选择项是“井”时,统计所有井名 whp change 2020.3.6 { bool flag=0; DataStr=DataStr.toUpper(); for(int j=0;jtableWidget_WellName->clearContents(); m_mutlWell->tableWidget_WellName->setColumnCount(1); QStringList header; header<<"井名"; m_mutlWell->tableWidget_WellName->setHorizontalHeaderLabels(header); m_mutlWell->tableWidget_WellName->horizontalHeader()->setStretchLastSection(true); m_mutlWell->tableWidget_WellName->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); m_mutlWell->tableWidget_WellName->setRowCount(WellNameList.size()); for(int i=0;itableWidget_WellName->setItem(i,0,new QTableWidgetItem(WellNameList.at(i))); m_mutlWell->tableWidget_WellName->item(i,0)->setCheckState(Qt::Checked); } } } void CInDefTableDlg::accept() { //throw std::logic_error("The method or operation is not implemented."); QDialog::done(Rejected); } void CInDefTableDlg::resizeEvent(QResizeEvent *pEvent) { QDialog::resizeEvent(pEvent); //m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch); int visual = m_pUI->tableWidget->horizontalHeader()->visualIndex(1); if (visual!=-1) { m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents); if(m_pUI->tableWidget->columnCount()<10)m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch); else m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); } if(MaxCol<10)m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch); else m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); // m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch); } void CInDefTableDlg::showEvent(QShowEvent * pEvent) { QDialog::showEvent(pEvent); // if(m_bFirstShow) { // m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch); int visual = m_pUI->tableWidget->horizontalHeader()->visualIndex(1); if (visual!=-1) { m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents); if(m_pUI->tableWidget->columnCount()<10)m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::Stretch); else m_pUI->tableWidget->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); } if(MaxCol<10)m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch); else m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents); //m_pUI->tableWidget_1->horizontalHeader()->resizeSections(QHeaderView::Stretch); //m_bFirstShow =false; } } END_OSGGRAPHICS_NAMESPACE