From 4fb6c50b5357262b487ffeede228959e7432bfeb Mon Sep 17 00:00:00 2001 From: jiayulong <22806282@qq.com> Date: Fri, 6 Feb 2026 15:30:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=8Ejson=E6=96=87?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=8A=A0=E8=BD=BD=E5=9B=BE=E5=A4=B4=E3=80=81?= =?UTF-8?q?=E6=88=90=E6=9E=9C=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logPlus/formhead.cpp | 234 +++++++++++++++++++++++++++++++++++- logPlus/formhead.h | 7 ++ logPlus/formmultiheads.cpp | 210 +++++++++++++++++++++++++------- logPlus/formmultiheads.h | 7 +- logPlus/mainwindowcurve.cpp | 30 ++++- 5 files changed, 439 insertions(+), 49 deletions(-) diff --git a/logPlus/formhead.cpp b/logPlus/formhead.cpp index 0f89fb2..401561f 100644 --- a/logPlus/formhead.cpp +++ b/logPlus/formhead.cpp @@ -231,6 +231,236 @@ void FormHead::Init(int iRows, int iCols) connect(CallManage::getInstance(), SIGNAL(sig_UnSelectTableItem(QString)), this, SLOT(s_UnSelectTableItem(QString))); } +//更新 +void FormHead::updateJsonInfo(QJsonObject headObjInfo) +{ + //展示其中一行 + int iCols = 0; + int iRows = 0; + // + if (headObjInfo.contains("iCols")) + { + QJsonValue value = headObjInfo.value("iCols"); + if (value.isDouble()) { + iCols = value.toInt(); + qDebug() << "iCols:" << QString::number(iCols); + } + } + // + if (headObjInfo.contains("iRows")) + { + QJsonValue value = headObjInfo.value("iRows"); + if (value.isDouble()) { + iRows = value.toInt(); + qDebug() << "iRows:" << QString::number(iRows); + } + } + + // + QJsonArray itemsArray; + if (headObjInfo.contains("items")) + { + QJsonValue value = headObjInfo.value("items"); + if (value.isArray()) { + itemsArray = value.toArray(); + qDebug() << "tracksArray number:" << QString::number(itemsArray.size()); + //展示所有单元格 + DisplayItems(itemsArray); + } + } + + //大小改变 + resizeWindow(); +} + +//展示所有单元格 +void FormHead::DisplayItems(QJsonArray itemsArray) +{ + int iCount = itemsArray.size(); + for(int i=0; i-1 && row>-1) + { + QTableWidgetItem* item = ui->tableWidget->item(row, col); + //内容 + if (itemObj.contains("text")) + { + QJsonValue value = itemObj.value("text"); + if (value.isString()) { + QString newText = value.toString(); + qDebug() << "text:" << newText; + item->setText(newText); + } + } + //字体 + if (itemObj.contains("Font")) + { + QJsonValue value = itemObj.value("Font"); + QFont newFont; + newFont.fromString(value.toString()); + item->setFont(newFont); + } + //字体颜色 + if (itemObj.contains("FontColor")) + { + QJsonValue value = itemObj.value("FontColor"); + QColor newColor; + newColor.setNamedColor(value.toString()); + // 设置字体颜色 + QBrush brush(newColor); + item->setForeground(brush); + } + //背景颜色 + if (itemObj.contains("backColor")) + { + QJsonValue value = itemObj.value("backColor"); + QColor newColor; + newColor.setNamedColor(value.toString()); + // 设置颜色 + QBrush brush(newColor); + item->setBackground(brush); + } + //列宽(cm) + double colWidth = 0; + double rowHeight = 0; + if (itemObj.contains("colWidth")) + { + QJsonValue value = itemObj.value("colWidth"); + if (value.isDouble()) { + colWidth = value.toDouble(); + qDebug() << "colWidth:" << QString::number(colWidth); + ui->tableWidget->setColumnWidth(col, colWidth*g_dPixelPerCm); + } + } + //行高 + if (itemObj.contains("rowHeight")) + { + QJsonValue value = itemObj.value("rowHeight"); + if (value.isDouble()) { + rowHeight = value.toDouble(); + qDebug() << "rowHeight:" << QString::number(rowHeight); + ui->tableWidget->setRowHeight(row, rowHeight*g_dPixelPerCm); + } + } + + //图例 + QString imagePath = ""; + double colWidth_Img = 0; + double rowHeight_Img = 0; + if (itemObj.contains("imagePath")) + { + QJsonValue value = itemObj.value("imagePath"); + if (value.isString()) { + imagePath = value.toString(); + qDebug() << "imagePath:" << imagePath; + item->setData(Qt::UserRole+1, imagePath); // 图片路径 + } + } + //图例宽(cm) + if (itemObj.contains("colWidth_Img")) + { + QJsonValue value = itemObj.value("colWidth_Img"); + if (value.isDouble()) { + colWidth_Img = value.toDouble(); + qDebug() << "colWidth_Img:" << QString::number(colWidth_Img); + item->setData(Qt::UserRole+2, colWidth_Img); + } + } + //图例高(cm) + if (itemObj.contains("rowHeight_Img")) + { + QJsonValue value = itemObj.value("rowHeight_Img"); + if (value.isDouble()) { + rowHeight_Img = value.toDouble(); + qDebug() << "rowHeight_Img:" << QString::number(rowHeight_Img); + item->setData(Qt::UserRole+3, rowHeight_Img); + } + } + if(imagePath != "") + { + //图例 + ChangHeadItemProperty(row, col, imagePath, colWidth_Img*g_dPixelPerCm, rowHeight_Img*g_dPixelPerCm); + } + + } + } +} + +void FormHead::ChangHeadItemProperty(int iRow, int iCol, QString imagePath, int colWidth, int rowHeight) +{ + //清空 + ui->tableWidget->setCellWidget(iRow, iCol, nullptr); + + if(imagePath!="") + { + 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(iRow, iCol, label); + + //m_item->setIcon(QIcon(*pixmap)); + // 设置背景刷 + //QBrush brush(*pixmap); + //m_item->setBackground(brush); + //m_tableWidget->setItem(m_iRow, m_iCol, new QTableWidgetItem(QIcon(*pixmap),tr(""))); + } + 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(iRow, iCol, label); + } + } + } +} QJsonObject FormHead::makeJson() { @@ -249,11 +479,11 @@ QJsonObject FormHead::makeJson() { for(int row=0; rowtableWidget->item(col, row); + QTableWidgetItem* item = ui->tableWidget->item(row, col); QJsonObject formHeadObj; - formHeadObj["col"] = col; formHeadObj["row"] = row; + formHeadObj["col"] = col; if(item) { //图例 diff --git a/logPlus/formhead.h b/logPlus/formhead.h index 82f52d4..8413f02 100644 --- a/logPlus/formhead.h +++ b/logPlus/formhead.h @@ -41,6 +41,13 @@ public: public: void Init(int iRows, int iCols); + //更新 + void updateJsonInfo(QJsonObject headObjInfo); + //展示所有单元格 + void DisplayItems(QJsonArray tracksArray); + //图例 + void ChangHeadItemProperty(int iRow, int iCol, QString imagePath, int colWidth, int rowHeight); + void resizeEvent(QResizeEvent *event); QJsonObject makeJson(); diff --git a/logPlus/formmultiheads.cpp b/logPlus/formmultiheads.cpp index b6bb102..2da7245 100644 --- a/logPlus/formmultiheads.cpp +++ b/logPlus/formmultiheads.cpp @@ -13,6 +13,7 @@ extern int g_iColsWidth; extern int g_iRowsHight; extern int g_iFixedWidth; extern int g_iFixedHeight; +extern double g_dPixelPerCm;//每厘米像素数 FormMultiHeads::FormMultiHeads(QWidget *parent) : QWidget(parent), @@ -61,8 +62,7 @@ FormMultiHeads::~FormMultiHeads() } void FormMultiHeads::slotContextMenu(QPoint pos) -{ - QtCommonClass *qtCommon = new QtCommonClass(this); +{ // QString strMenu= ""; if(m_strHeadOrTail == "Head") @@ -84,37 +84,7 @@ void FormMultiHeads::slotContextMenu(QPoint pos) if (result == QDialog::Accepted) { // 处理用户点击了确定按钮的逻辑 qDebug() << "Accepted="; - - int rowcount = ui->tableWidget->rowCount(); //总行数 - //增加1行 - ui->tableWidget->setRowCount(rowcount+1); - //行标题 - QTableWidgetItem *headerItem = new QTableWidgetItem(""); - ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem); - - int tempWidth = g_iCols*g_iColsWidth+g_iFixedWidth+8; - int tempHight = g_iRows*g_iRowsHight+g_iFixedHeight+8; - //设置行高度 - ui->tableWidget->setRowHeight(rowcount, tempHight); - if(rowcount==0) - { - //设置列宽 - ui->tableWidget->setColumnWidth(0, tempWidth); - } - else - { - int iWidth=ui->tableWidget->columnWidth(0); - if(iWidthtableWidget->setColumnWidth(0, tempWidth); - } - } - // - QString strUuid = qtCommon->getUUid(); - FormHead *widgetHead = new FormHead(this, strUuid); - widgetHead->Init(g_iRows, g_iCols); - ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); + AddHead(); } else if (result == QDialog::Rejected) { // 处理用户点击了取消按钮的逻辑 @@ -127,7 +97,43 @@ void FormMultiHeads::slotContextMenu(QPoint pos) } } -void FormMultiHeads::resizeItem(QString indexID, double tempWidth, double tempHight) +//添加图头 +void FormMultiHeads::AddHead() +{ + int rowcount = ui->tableWidget->rowCount(); //总行数 + //增加1行 + ui->tableWidget->setRowCount(rowcount+1); + //行标题 + QTableWidgetItem *headerItem = new QTableWidgetItem(""); + ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem); + + int colWidth = g_iCols*g_iColsWidth+g_iFixedWidth+8; + int rowHight = g_iRows*g_iRowsHight+g_iFixedHeight+8; + //设置行高度 + ui->tableWidget->setRowHeight(rowcount, rowHight); + if(rowcount==0) + { + //设置列宽 + ui->tableWidget->setColumnWidth(0, colWidth); + } + else + { + int iWidth=ui->tableWidget->columnWidth(0); + if(iWidthtableWidget->setColumnWidth(0, colWidth); + } + } + // + QtCommonClass *qtCommon = new QtCommonClass(this); + QString strUuid = qtCommon->getUUid(); + FormHead *widgetHead = new FormHead(this, strUuid); + widgetHead->Init(g_iRows, g_iCols); + ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); +} + +void FormMultiHeads::resizeItem(QString indexID, double colWidth, double rowHight) { // int rowCount = ui->tableWidget->rowCount();//总行数 @@ -145,13 +151,13 @@ void FormMultiHeads::resizeItem(QString indexID, double tempWidth, double tempHi if(widgetHead->m_indexID == indexID) { //设置行高度 - ui->tableWidget->setRowHeight(i, tempHight+8); + ui->tableWidget->setRowHeight(i, rowHight+8); int iWidth=ui->tableWidget->columnWidth(0); - if(iWidthtableWidget->setColumnWidth(0, tempWidth+8); + ui->tableWidget->setColumnWidth(0, colWidth+8); } } } @@ -160,19 +166,26 @@ void FormMultiHeads::resizeItem(QString indexID, double tempWidth, double tempHi } } -QJsonObject FormMultiHeads::makeJson() +QJsonArray FormMultiHeads::makeJsonArray() { - // 创建根对象 - QJsonObject rootObj; + //列宽 + double colWidth = ui->tableWidget->columnWidth(0)/g_dPixelPerCm; + double rowHeight = 0; // 创建JSON数组并填充数据 QJsonArray subcaseArray; // - int columnCount = ui->tableWidget->columnCount();//总列数 - for(int i=0; itableWidget->rowCount();//总行数 + for(int i=0; itableWidget->rowHeight(i)/g_dPixelPerCm; + QJsonObject formHeadObj; formHeadObj["id"] = i; + formHeadObj["colWidth"] = colWidth; + formHeadObj["rowHeight"] = rowHeight; + if( ui->tableWidget->cellWidget(i, 0) != nullptr ) { auto myWidget = ui->tableWidget->cellWidget(i, 0); @@ -185,7 +198,116 @@ QJsonObject FormMultiHeads::makeJson() } subcaseArray.append(formHeadObj); } - rootObj["formMultiHeads"]=subcaseArray; - return rootObj; + return subcaseArray; +} + +//展示所有图头/成果表 +//Head代表图头, Tail代表成果表 +void FormMultiHeads::DisplayHeads(QJsonArray headsArray, QString strHeadOrTail) +{ + QtCommonClass *qtCommon = new QtCommonClass(this); + QMap mapHeads; + double colWidth = 0; + double rowHeight = 0; + + int id = 0; + int iCount = headsArray.size(); + for(int i=0; itableWidget->setColumnWidth(0, colWidth); + } + } + } + + if (headObj.contains("rowHeight")) + { + QJsonValue value = headObj.value("rowHeight"); + if (value.isDouble()) { + rowHeight = value.toDouble(); + qDebug() << "rowHeight:" << QString::number(rowHeight); + //设置行高度 + ui->tableWidget->setRowHeight(id, rowHeight); + } + } + + int rowcount = ui->tableWidget->rowCount(); //总行数 + //增加1行 + ui->tableWidget->setRowCount(rowcount+1); + //行标题 + QTableWidgetItem *headerItem = new QTableWidgetItem(""); + ui->tableWidget->setVerticalHeaderItem(rowcount, headerItem); + + if (headObj.contains("headinfo")) + { + QJsonValue value = headObj.value("headinfo"); + if (value.isObject()) { + QJsonObject headObjInfo = value.toObject(); + //展示其中一行 + int iCols = 0; + int iRows = 0; + // + if (headObjInfo.contains("iCols")) + { + QJsonValue value = headObjInfo.value("iCols"); + if (value.isDouble()) { + iCols = value.toInt(); + qDebug() << "iCols:" << QString::number(iCols); + } + } + // + if (headObjInfo.contains("iRows")) + { + QJsonValue value = headObjInfo.value("iRows"); + if (value.isDouble()) { + iRows = value.toInt(); + qDebug() << "iRows:" << QString::number(iRows); + } + } + + // + QString strUuid = qtCommon->getUUid(); + FormHead *widgetHead = new FormHead(this, strUuid); + widgetHead->Init(iRows, iCols); + ui->tableWidget->setCellWidget(rowcount, 0, widgetHead); + // + widgetHead->updateJsonInfo(headObjInfo); + } + } + } + } } diff --git a/logPlus/formmultiheads.h b/logPlus/formmultiheads.h index 452acc3..4c6ca1e 100644 --- a/logPlus/formmultiheads.h +++ b/logPlus/formmultiheads.h @@ -30,8 +30,13 @@ public slots: public: + void AddHead(); void resizeItem(QString indexID, double tempWidth, double tempHight); - QJsonObject makeJson(); + QJsonArray makeJsonArray(); + + //展示所有图头/成果表 + //Head代表图头, Tail代表成果表 + void DisplayHeads(QJsonArray headsArray, QString strHeadOrTail); public: QString m_strHeadOrTail = ""; //Head代表图头, Tail代表成果表 diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 299c801..40ed3ab 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -2391,9 +2391,9 @@ QJsonObject MainWindowCurve::makeJson() rootObj["wells"]=subcaseArray; //图头 - rootObj["heads"]=m_formMultiHeads->makeJson(); + rootObj["heads"]=m_formMultiHeads->makeJsonArray(); //成果表 - rootObj["tails"]=m_formMultiTails->makeJson(); + rootObj["tails"]=m_formMultiTails->makeJsonArray(); return rootObj; @@ -3316,6 +3316,8 @@ void MainWindowCurve::Open(QString fileFull) { QString strPrjname = ""; QJsonArray wellsArray; + QJsonArray headsArray; + QJsonArray tailsArray; QJsonParseError jsonError; // 文件 @@ -3389,6 +3391,30 @@ void MainWindowCurve::Open(QString fileFull) DisplayWells(wellsArray); } } + // + QString strHeadOrTail = ""; //Head代表图头, Tail代表成果表 + if (object.contains("heads")) + { + 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); + } + } + if (object.contains("tails")) + { + 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); + } + } } }