From c6f9e47e74c63e06a3912714c6cf950010936082 Mon Sep 17 00:00:00 2001 From: jiayulong <22806282@qq.com> Date: Mon, 9 Feb 2026 11:26:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=9B=BE=E5=A4=B4=E5=8F=B3=E9=94=AE=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD=E5=AE=8C=E5=96=84=EF=BC=8C=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E6=96=B0=E5=A2=9E=E3=80=81=E5=88=A0=E9=99=A4=E8=A1=8C?= =?UTF-8?q?=E5=88=97=E7=AD=89=E5=8A=9F=E8=83=BD=E3=80=822.=E4=BC=98?= =?UTF-8?q?=E5=8C=96json=E6=96=87=E4=BB=B6=E5=8A=A0=E8=BD=BD=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logPlus/formhead.cpp | 264 +++++++++++++++++++++++++++--------- logPlus/formhead.h | 13 +- logPlus/formmultiheads.cpp | 24 ++-- logPlus/formmultiheads.h | 2 +- logPlus/mainwindowcurve.cpp | 39 ++++-- logPlus/mainwindowcurve.h | 5 +- 6 files changed, 257 insertions(+), 90 deletions(-) diff --git a/logPlus/formhead.cpp b/logPlus/formhead.cpp index 05ac76d..2297093 100644 --- a/logPlus/formhead.cpp +++ b/logPlus/formhead.cpp @@ -80,7 +80,7 @@ FormHead::~FormHead() delete ui; } -void FormHead::resizeWindow() +void FormHead::resizeWindow(bool bDelete) { QRect rect = this->rect(); int tempWidth = 0; //m_iCols*(g_iColsWidth+1)+g_iFixedWidth; @@ -108,7 +108,7 @@ void FormHead::resizeWindow() ui->tableWidget->setGeometry(0, 2, tempWidth, tempHight); } - m_parent->resizeItem(m_indexID, tempWidth, tempHight); + m_parent->resizeItem(m_indexID, tempWidth, tempHight, bDelete); } void FormHead::resizeEvent(QResizeEvent *event) @@ -177,51 +177,6 @@ void FormHead::Init(int iRows, int iCols) //item->setData(Qt::UserRole, QVariant("vertical")); // ui->tableWidget->setItem(i, j, item); - - //--------------------------- - QString imagePath = ""; //"./image/胜利符号库/解释结论符号/油层.svg" - QVariant bgData = item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径 - if (bgData.isValid()) { - imagePath = bgData.toString(); - } - if(imagePath=="") - { - continue; - } - // - if(imagePath.size()>4) - { - // - QString strLast = imagePath.right(4); - if(strLast.toLower()==".svg") - { - QSvgRenderer* svgRender = new QSvgRenderer(); - svgRender->load(imagePath); - // - QPixmap* pixmap = new QPixmap(colWidth-1, rowHeight-1); - pixmap->fill(Qt::transparent);//设置背景透明 - QPainter p(pixmap); - svgRender->render(&p); - //1.直接采用控件显示 - QLabel* label = new QLabel; - label->setPixmap(*pixmap); - label->setAlignment(Qt::AlignHCenter); - label->show(); - ui->tableWidget->setCellWidget(i, j,label); - } - else if(strLast.toLower()==".png") - { - // 加载图片 - QPixmap pixmap(imagePath); - //pixmap.scaled(colWidth-1, rowHeight-1, Qt::KeepAspectRatio, Qt::SmoothTransformation);//缩放 - //1.直接采用控件显示 - QLabel* label = new QLabel; - label->setPixmap(pixmap.scaled(colWidth-1, rowHeight-1, Qt::KeepAspectRatio, Qt::SmoothTransformation)); - label->setAlignment(Qt::AlignHCenter); - label->show(); - ui->tableWidget->setCellWidget(i, j,label); - } - } } } @@ -671,25 +626,19 @@ void FormHead::onItemChanged(QTableWidgetItem* item) void FormHead::slotContextMenu(QPoint pos) { QMenu menu(ui->tableWidget); - QAction *mergeAction = menu.addAction("合并表格"); - QAction *refreshAction = menu.addAction("拆分表格"); - QAction *deleteAction = menu.addAction("删除行"); - QAction *addAction = menu.addAction("添加行"); - - // 弹出菜单 - QAction *selectedAction = menu.exec(ui->tableWidget->mapToGlobal(pos)); - - if (selectedAction == mergeAction) { - qDebug() << "合并表格"; - slotMerge(); - } else if (selectedAction == deleteAction) { - //删除1行 - int row = ui->tableWidget->currentRow(); - ui->tableWidget->removeRow(row); - } else if (selectedAction == refreshAction) { - qDebug() << "拆分表格"; - slotSplit(); - } + menu.addAction(QIcon(::GetImagePath() + "icon/MergeCell.png"), "合并单元格", this, &FormHead::slotMerge); + menu.addAction(QIcon(::GetImagePath() + "icon/Grid.png"), "拆分单元格", this, &FormHead::slotSplit); + menu.addSeparator(); + menu.addAction(QIcon(::GetImagePath() + "icon/AddRow.png"), "前插入行", this, &FormHead::slotAddRow); + menu.addAction(QIcon(::GetImagePath() + "icon/AddRow.png"), "后插入行", this, &FormHead::slotAddAfterRow); + menu.addSeparator(); + menu.addAction(QIcon(::GetImagePath() + "icon/AddColumn.png"), "前插入列", this, &FormHead::slotAddCol); + menu.addAction(QIcon(::GetImagePath() + "icon/AddColumn.png"), "后插入列", this, &FormHead::slotAddAfterCol); + menu.addSeparator(); + menu.addAction(QIcon(::GetImagePath() + "icon/DelRow.png"), "删除行", this, &FormHead::slotDeleteRow); + menu.addAction(QIcon(::GetImagePath() + "icon/DelColumn.png"), "删除列", this, &FormHead::slotDeleteCol); + menu.addAction(QIcon(::GetImagePath() + "icon/DeleteTable.png"), "删除表", this, &FormHead::slotDeleteTable); + menu.exec(ui->tableWidget->mapToGlobal(pos)); } //合并 @@ -764,6 +713,189 @@ void FormHead::slotSplit() ui->tableWidget->setSpan(row, col, 1, 1); // 设置跨度为1 } +//前插入行 +void FormHead::slotAddRow() +{ + int row = ui->tableWidget->currentRow(); + ui->tableWidget->insertRow(row); + + //新插入行,单元格初始化 + int iCols = ui->tableWidget->columnCount(); + for(int j=0; jsetData(Qt::UserRole+1, ""); //图片路径 ./image/胜利符号库/解释结论符号/ + item->setData(Qt::UserRole+2, 0); //图例宽 + item->setData(Qt::UserRole+3, 0); //图例高 + + // 设置背景色 + QColor color(255, 255, 255, 255); + QBrush HeadBrush = QBrush(color); + HeadBrush.setStyle(Qt::SolidPattern); + item->setBackground(HeadBrush); + item->setData(Qt::BackgroundRole, color); // 双重保险 + // 设置字体颜色 + QColor colorTxt(0, 0, 0, 255); + item->setForeground(QBrush(colorTxt)); + //item->setData(Qt::UserRole, QVariant("vertical")); + // + ui->tableWidget->setItem(row, j, item); + } + + //改变大小 + resizeWindow(); +} + +//后插入行 +void FormHead::slotAddAfterRow() +{ + int row = ui->tableWidget->currentRow(); + ui->tableWidget->insertRow(row+1); + + //新插入行,单元格初始化 + int iCols = ui->tableWidget->columnCount(); + for(int j=0; jsetData(Qt::UserRole+1, ""); //图片路径 ./image/胜利符号库/解释结论符号/ + item->setData(Qt::UserRole+2, 0); //图例宽 + item->setData(Qt::UserRole+3, 0); //图例高 + + // 设置背景色 + QColor color(255, 255, 255, 255); + QBrush HeadBrush = QBrush(color); + HeadBrush.setStyle(Qt::SolidPattern); + item->setBackground(HeadBrush); + item->setData(Qt::BackgroundRole, color); // 双重保险 + // 设置字体颜色 + QColor colorTxt(0, 0, 0, 255); + item->setForeground(QBrush(colorTxt)); + //item->setData(Qt::UserRole, QVariant("vertical")); + // + ui->tableWidget->setItem(row+1, j, item); + } + + //改变大小 + resizeWindow(); +} + +//前插入列 +void FormHead::slotAddCol() +{ + int col = ui->tableWidget->currentColumn(); + ui->tableWidget->insertColumn(col); + + //新插入行,单元格初始化 + int iRows = ui->tableWidget->rowCount(); + for(int j=0; jsetData(Qt::UserRole+1, ""); //图片路径 ./image/胜利符号库/解释结论符号/ + item->setData(Qt::UserRole+2, 0); //图例宽 + item->setData(Qt::UserRole+3, 0); //图例高 + + // 设置背景色 + QColor color(255, 255, 255, 255); + QBrush HeadBrush = QBrush(color); + HeadBrush.setStyle(Qt::SolidPattern); + item->setBackground(HeadBrush); + item->setData(Qt::BackgroundRole, color); // 双重保险 + // 设置字体颜色 + QColor colorTxt(0, 0, 0, 255); + item->setForeground(QBrush(colorTxt)); + //item->setData(Qt::UserRole, QVariant("vertical")); + // + ui->tableWidget->setItem(j, col, item); + } + + //改变大小 + resizeWindow(); +} + +//后插入列 +void FormHead::slotAddAfterCol() +{ + int col = ui->tableWidget->currentColumn(); + ui->tableWidget->insertColumn(col+1); + + //新插入行,单元格初始化 + int iRows = ui->tableWidget->rowCount(); + for(int j=0; jsetData(Qt::UserRole+1, ""); //图片路径 ./image/胜利符号库/解释结论符号/ + item->setData(Qt::UserRole+2, 0); //图例宽 + item->setData(Qt::UserRole+3, 0); //图例高 + + // 设置背景色 + QColor color(255, 255, 255, 255); + QBrush HeadBrush = QBrush(color); + HeadBrush.setStyle(Qt::SolidPattern); + item->setBackground(HeadBrush); + item->setData(Qt::BackgroundRole, color); // 双重保险 + // 设置字体颜色 + QColor colorTxt(0, 0, 0, 255); + item->setForeground(QBrush(colorTxt)); + //item->setData(Qt::UserRole, QVariant("vertical")); + // + ui->tableWidget->setItem(j, col+1, item); + } + + //改变大小 + resizeWindow(); +} + +//删除行 +void FormHead::slotDeleteRow() +{ + //删除1行 + int row = ui->tableWidget->currentRow(); + ui->tableWidget->removeRow(row); + + int rowCount = ui->tableWidget->rowCount(); + if(rowCount==0) + { + //改变大小,并删除父窗口的对应行 + resizeWindow(true); + } + else { + //改变大小 + resizeWindow(false); + } +} + +//删除列 +void FormHead::slotDeleteCol() +{ + //删除1列 + int col = ui->tableWidget->currentColumn(); + ui->tableWidget->removeColumn(col); + + int colCount = ui->tableWidget->columnCount(); + if(colCount==0) + { + //改变大小,并删除父窗口的对应行 + resizeWindow(true); + } + else { + //改变大小 + resizeWindow(false); + } +} + +//删除表 +void FormHead::slotDeleteTable() +{ + //删除 + ui->tableWidget->clear(); + //改变大小,并删除父窗口的对应行 + resizeWindow(true); +} + bool FormHead::eventFilter(QObject* obj, QEvent* event) { if (obj == ui->tableWidget && event->type() == QEvent::KeyPress) { diff --git a/logPlus/formhead.h b/logPlus/formhead.h index 8413f02..7477bed 100644 --- a/logPlus/formhead.h +++ b/logPlus/formhead.h @@ -52,7 +52,7 @@ public: QJsonObject makeJson(); public slots: - void resizeWindow(); + void resizeWindow(bool bDelete=false); // void slotItemClicked(QTableWidgetItem* item); void onItemChanged(QTableWidgetItem* item); @@ -65,6 +65,17 @@ public slots: void slotContextMenu(QPoint pos); void slotMerge();//合并 void slotSplit();//拆分 + // + void slotAddRow();//前插入行 + void slotAddAfterRow();//后插入行 + // + void slotAddCol();//前插入列 + void slotAddAfterCol();//后插入列 + // + void slotDeleteRow();//删除行 + void slotDeleteCol();//删除列 + void slotDeleteTable();//删除表 + //图头 void copy(); void Paste(); diff --git a/logPlus/formmultiheads.cpp b/logPlus/formmultiheads.cpp index 2da7245..42ddfe5 100644 --- a/logPlus/formmultiheads.cpp +++ b/logPlus/formmultiheads.cpp @@ -133,7 +133,7 @@ void FormMultiHeads::AddHead() ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); } -void FormMultiHeads::resizeItem(QString indexID, double colWidth, double rowHight) +void FormMultiHeads::resizeItem(QString indexID, double colWidth, double rowHight, bool bDelete) { // int rowCount = ui->tableWidget->rowCount();//总行数 @@ -150,14 +150,22 @@ void FormMultiHeads::resizeItem(QString indexID, double colWidth, double rowHigh { if(widgetHead->m_indexID == indexID) { - //设置行高度 - ui->tableWidget->setRowHeight(i, rowHight+8); - - int iWidth=ui->tableWidget->columnWidth(0); - if(iWidthtableWidget->setColumnWidth(0, colWidth+8); + //删除1行 + ui->tableWidget->removeRow(i); + } + else { + //设置行高度 + ui->tableWidget->setRowHeight(i, rowHight+8); + + int iWidth=ui->tableWidget->columnWidth(0); + if(iWidthtableWidget->setColumnWidth(0, colWidth+8); + } + } } } diff --git a/logPlus/formmultiheads.h b/logPlus/formmultiheads.h index 4c6ca1e..e69ec43 100644 --- a/logPlus/formmultiheads.h +++ b/logPlus/formmultiheads.h @@ -31,7 +31,7 @@ public slots: public: void AddHead(); - void resizeItem(QString indexID, double tempWidth, double tempHight); + void resizeItem(QString indexID, double tempWidth, double tempHight, bool bDelete=false); QJsonArray makeJsonArray(); //展示所有图头/成果表 diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 40ed3ab..755f84d 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -2311,6 +2311,19 @@ void MainWindowCurve::s_showHeadTable() m_dock2->hide(); } else { + //第一次显示,判断是否从json加载 + if(m_bHeadLoadJson) + { + m_bHeadLoadJson = false; + + QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 + //展示所有图头 + strHeadOrTail = "Head"; //Head代表图头, Tail代表成果表 + m_formMultiHeads->DisplayHeads(m_headsArray, strHeadOrTail); + //展示所有成果表 + strHeadOrTail = "Tail"; //Head代表图头, Tail代表成果表 + m_formMultiTails->DisplayHeads(m_tailsArray, strHeadOrTail); + } m_dock1->show(); m_dock2->show(); } @@ -3316,8 +3329,9 @@ void MainWindowCurve::Open(QString fileFull) { QString strPrjname = ""; QJsonArray wellsArray; - QJsonArray headsArray; - QJsonArray tailsArray; + //清空 + m_headsArray.empty(); + m_tailsArray.empty(); QJsonParseError jsonError; // 文件 @@ -3392,27 +3406,26 @@ void MainWindowCurve::Open(QString fileFull) } } // - QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 if (object.contains("heads")) { + //true代表从json加载图头、结果表 + m_bHeadLoadJson = true; + QJsonValue value = object.value("heads"); if (value.isArray()) { - headsArray = value.toArray(); - qDebug() << "headsArray number:" << QString::number(headsArray.size()); - //展示所有图头 - strHeadOrTail = "Head"; //Head代表图头, Tail代表成果表 - m_formMultiHeads->DisplayHeads(headsArray, strHeadOrTail); + m_headsArray = value.toArray(); + qDebug() << "headsArray number:" << QString::number(m_headsArray.size()); } } if (object.contains("tails")) { + //true代表从json加载图头、结果表 + m_bHeadLoadJson = true; + QJsonValue value = object.value("tails"); if (value.isArray()) { - tailsArray = value.toArray(); - qDebug() << "tailsArray number:" << QString::number(tailsArray.size()); - //展示所有图头 - strHeadOrTail = "Tail"; //Head代表图头, Tail代表成果表 - m_formMultiTails->DisplayHeads(tailsArray, strHeadOrTail); + m_tailsArray = value.toArray(); + qDebug() << "tailsArray number:" << QString::number(m_tailsArray.size()); } } } diff --git a/logPlus/mainwindowcurve.h b/logPlus/mainwindowcurve.h index 8012588..973e8b3 100644 --- a/logPlus/mainwindowcurve.h +++ b/logPlus/mainwindowcurve.h @@ -109,7 +109,10 @@ public: void initToolBar(); void initToolBar_2(); void initToolBar_3(); - bool m_bMerge = false;//是否拼接状态,否代表校深状态。为了切换时做数据清理 + bool m_bMerge = false;//true代表拼接状态,false代表校深状态。为了切换时做数据清理 + bool m_bHeadLoadJson = false;//true代表从json加载图头、结果表。false不加载 + QJsonArray m_headsArray; + QJsonArray m_tailsArray; // 返回 strWellName << strSlfName QStringList insertCol(int nW);