支持从json文件,加载图头、成果表

This commit is contained in:
jiayulong 2026-02-06 15:30:26 +08:00
parent c422a3d87a
commit 4fb6c50b53
5 changed files with 439 additions and 49 deletions

View File

@ -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<iCount; i++)
{
QJsonValue itemValue = itemsArray[i];
QJsonObject itemObj = itemValue.toObject();
int col=-1;
int row=-1;
//
if (itemObj.contains("col"))
{
QJsonValue value = itemObj.value("col");
if (value.isDouble()) {
col = value.toInt();
qDebug() << "col:" << QString::number(col);
}
}
//
if (itemObj.contains("row"))
{
QJsonValue value = itemObj.value("row");
if (value.isDouble()) {
row = value.toInt();
qDebug() << "row:" << QString::number(row);
}
}
if(col>-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; row<rowCount; row++)
{
QTableWidgetItem* item = ui->tableWidget->item(col, row);
QTableWidgetItem* item = ui->tableWidget->item(row, col);
QJsonObject formHeadObj;
formHeadObj["col"] = col;
formHeadObj["row"] = row;
formHeadObj["col"] = col;
if(item)
{
//图例

View File

@ -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();

View File

@ -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(iWidth<g_iCols*g_iColsWidth)//列宽变大,以最大列宽为准
{
//设置列宽
ui->tableWidget->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(iWidth<g_iCols*g_iColsWidth)//列宽变大,以最大列宽为准
{
//设置列宽
ui->tableWidget->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(iWidth<tempWidth+8)//列宽变大,以最大列宽为准
if(iWidth<colWidth+8)//列宽变大,以最大列宽为准
{
//设置列宽
ui->tableWidget->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; i<columnCount; i++)
int rowCount = ui->tableWidget->rowCount();//总行
for(int i=0; i<rowCount; i++)
{
//行高
rowHeight = ui->tableWidget->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<int, int> mapHeads;
double colWidth = 0;
double rowHeight = 0;
int id = 0;
int iCount = headsArray.size();
for(int i=0; i<iCount; i++)
{
QJsonValue headValue = headsArray[i];
QJsonObject headObj = headValue.toObject();
//
if (headObj.contains("id"))
{
QJsonValue value = headObj.value("id");
if (value.isDouble()) {
id = value.toInt();
qDebug() << "id:" << QString::number(id);
//
mapHeads.insert(id, i);
}
}
}
for(int id=0; id<iCount; id++)
{
if(mapHeads.contains(id))
{
int iNum = mapHeads.value(id);
//按照id顺序展示井
QJsonValue headValue = headsArray[iNum];
QJsonObject headObj = headValue.toObject();
//
if(id==0)
{
if (headObj.contains("colWidth"))
{
QJsonValue value = headObj.value("colWidth");
if (value.isDouble()) {
colWidth = value.toDouble();
qDebug() << "colWidth:" << QString::number(colWidth);
//设置列宽
ui->tableWidget->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);
}
}
}
}
}

View File

@ -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代表成果表

View File

@ -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);
}
}
}
}