优化合并单元格的json属性加载方法

This commit is contained in:
jiayulong 2026-02-06 17:20:27 +08:00
parent 4fb6c50b53
commit 2e55985bc8

View File

@ -276,136 +276,195 @@ void FormHead::updateJsonInfo(QJsonObject headObjInfo)
//展示所有单元格 //展示所有单元格
void FormHead::DisplayItems(QJsonArray itemsArray) void FormHead::DisplayItems(QJsonArray itemsArray)
{ {
QMap<int, int> mapItems;
int id = 0;
int iCount = itemsArray.size(); int iCount = itemsArray.size();
for(int i=0; i<iCount; i++) for(int i=0; i<iCount; i++)
{ {
QJsonValue itemValue = itemsArray[i]; QJsonValue itemValue = itemsArray[i];
QJsonObject itemObj = itemValue.toObject(); QJsonObject itemObj = itemValue.toObject();
int col=-1;
int row=-1;
// //
if (itemObj.contains("col")) if (itemObj.contains("id"))
{ {
QJsonValue value = itemObj.value("col"); QJsonValue value = itemObj.value("id");
if (value.isDouble()) { if (value.isDouble()) {
col = value.toInt(); id = value.toInt();
qDebug() << "col:" << QString::number(col); qDebug() << "id:" << QString::number(id);
} //
} mapItems.insert(id, i);
//
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) for(int id=0; id<iCount; id++)
{
if(mapItems.contains(id))
{ {
QTableWidgetItem* item = ui->tableWidget->item(row, col); int iNum = mapItems.value(id);
//内容 QJsonValue itemValue = itemsArray[iNum];
if (itemObj.contains("text"))
QJsonObject itemObj = itemValue.toObject();
int col=-1;
int row=-1;
//
if (itemObj.contains("col"))
{ {
QJsonValue value = itemObj.value("text"); QJsonValue value = itemObj.value("col");
if (value.isString()) { if (value.isDouble()) {
QString newText = value.toString(); col = value.toInt();
qDebug() << "text:" << newText; qDebug() << "col:" << QString::number(col);
item->setText(newText);
} }
} }
//字体 //
if (itemObj.contains("Font")) if (itemObj.contains("row"))
{ {
QJsonValue value = itemObj.value("Font"); QJsonValue value = itemObj.value("row");
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()) { if (value.isDouble()) {
colWidth = value.toDouble(); row = value.toInt();
qDebug() << "colWidth:" << QString::number(colWidth); qDebug() << "row:" << QString::number(row);
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);
} }
} }
//图例 if(col>-1 && row>-1)
QString imagePath = "";
double colWidth_Img = 0;
double rowHeight_Img = 0;
if (itemObj.contains("imagePath"))
{ {
QJsonValue value = itemObj.value("imagePath"); QTableWidgetItem* item = ui->tableWidget->item(row, col);
if (value.isString()) { //内容
imagePath = value.toString(); if (itemObj.contains("text"))
qDebug() << "imagePath:" << imagePath; {
item->setData(Qt::UserRole+1, imagePath); // 图片路径 QJsonValue value = itemObj.value("text");
if (value.isString()) {
QString newText = value.toString();
qDebug() << "text:" << newText;
item->setText(newText);
}
} }
} //字体
//图例宽(cm) if (itemObj.contains("Font"))
if (itemObj.contains("colWidth_Img")) {
{ QJsonValue value = itemObj.value("Font");
QJsonValue value = itemObj.value("colWidth_Img"); QFont newFont;
if (value.isDouble()) { newFont.fromString(value.toString());
colWidth_Img = value.toDouble(); item->setFont(newFont);
qDebug() << "colWidth_Img:" << QString::number(colWidth_Img);
item->setData(Qt::UserRole+2, colWidth_Img);
} }
} //字体颜色
//图例高(cm) if (itemObj.contains("FontColor"))
if (itemObj.contains("rowHeight_Img")) {
{ QJsonValue value = itemObj.value("FontColor");
QJsonValue value = itemObj.value("rowHeight_Img"); QColor newColor;
if (value.isDouble()) { newColor.setNamedColor(value.toString());
rowHeight_Img = value.toDouble(); // 设置字体颜色
qDebug() << "rowHeight_Img:" << QString::number(rowHeight_Img); QBrush brush(newColor);
item->setData(Qt::UserRole+3, rowHeight_Img); item->setForeground(brush);
} }
} //背景颜色
if(imagePath != "") 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);
}
}
//图例 //图例
ChangHeadItemProperty(row, col, imagePath, colWidth_Img*g_dPixelPerCm, rowHeight_Img*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);
}
//合并单元格
int rowSpan = 1;
int colSpan = 1;
if (itemObj.contains("rowSpan"))
{
QJsonValue value = itemObj.value("rowSpan");
if (value.isDouble()) {
rowSpan = value.toInt();
qDebug() << "rowSpan:" << QString::number(rowSpan);
}
}
if (itemObj.contains("columnSpan"))
{
QJsonValue value = itemObj.value("columnSpan");
if (value.isDouble()) {
colSpan = value.toInt();
qDebug() << "colSpan:" << QString::number(colSpan);
}
}
if(rowSpan > 1 || colSpan > 1)
{
int rowSpanCurrent = 0;
int columnSpanCurrent = 0;
rowSpanCurrent = ui->tableWidget->rowSpan(row, col);
columnSpanCurrent = ui->tableWidget->columnSpan(row, col);
if(rowSpanCurrent > 1 || columnSpanCurrent > 1)
{
//已经合并过,不再合并
}
else {
//合并单元格
ui->tableWidget->setSpan(row, col, rowSpan, colSpan);
}
}
}
} }
} }
} }
@ -474,6 +533,7 @@ QJsonObject FormHead::makeJson()
rootObj["iRows"] = rowCount; rootObj["iRows"] = rowCount;
rootObj["iCols"] = columnCount; rootObj["iCols"] = columnCount;
// //
int id=0;
QJsonArray subcaseArray; QJsonArray subcaseArray;
for(int col=0; col<columnCount; col++) for(int col=0; col<columnCount; col++)
{ {
@ -482,18 +542,20 @@ QJsonObject FormHead::makeJson()
QTableWidgetItem* item = ui->tableWidget->item(row, col); QTableWidgetItem* item = ui->tableWidget->item(row, col);
QJsonObject formHeadObj; QJsonObject formHeadObj;
formHeadObj["id"] = id;
formHeadObj["row"] = row; formHeadObj["row"] = row;
formHeadObj["col"] = col; formHeadObj["col"] = col;
id++;
if(item) if(item)
{ {
//图例 //图例
QString imagePath = ""; QString imagePath = "";
//图头, 图例宽高 //图头, 图例宽高
double m_colWidth_Img = 1; double my_colWidth_Img = 1;
double m_rowHeight_Img = 1; double my_rowHeight_Img = 1;
//图头, 行高、列宽 //图头, 行高、列宽
double m_colWidth = 1; double my_colWidth = 1;
double m_rowHeight = 1; double my_rowHeight = 1;
QVariant bgData = item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径 QVariant bgData = item->data(Qt::UserRole+1); // 我们约定用这个角色存储图片路径
if (bgData.isValid()) { if (bgData.isValid()) {
@ -502,28 +564,36 @@ QJsonObject FormHead::makeJson()
//图例宽 //图例宽
QVariant colWidth_Img = item->data(Qt::UserRole+2); QVariant colWidth_Img = item->data(Qt::UserRole+2);
if (colWidth_Img.isValid()) { if (colWidth_Img.isValid()) {
m_colWidth_Img = colWidth_Img.toDouble(); my_colWidth_Img = colWidth_Img.toDouble();
} }
//图例高 //图例高
QVariant rowHeight_Img = item->data(Qt::UserRole+3); QVariant rowHeight_Img = item->data(Qt::UserRole+3);
if (rowHeight_Img.isValid()) { if (rowHeight_Img.isValid()) {
m_rowHeight_Img = rowHeight_Img.toDouble(); my_rowHeight_Img = rowHeight_Img.toDouble();
} }
//行高、列宽 //行高、列宽
m_colWidth = ui->tableWidget->columnWidth(col)/g_dPixelPerCm; my_colWidth = ui->tableWidget->columnWidth(col)/g_dPixelPerCm;
m_rowHeight = ui->tableWidget->rowHeight(row)/g_dPixelPerCm; my_rowHeight = ui->tableWidget->rowHeight(row)/g_dPixelPerCm;
int rowSpan = 0;
int columnSpan = 0;
rowSpan = ui->tableWidget->rowSpan(row, col);
columnSpan = ui->tableWidget->columnSpan(row, col);
//---------------- //----------------
formHeadObj["imagePath"] = imagePath; formHeadObj["imagePath"] = imagePath;
formHeadObj["colWidth_Img"] = m_colWidth_Img; formHeadObj["colWidth_Img"] = my_colWidth_Img;
formHeadObj["rowHeight_Img"] = m_rowHeight_Img; formHeadObj["rowHeight_Img"] = my_rowHeight_Img;
formHeadObj["backColor"] = item->background().color().name();//背景颜色 formHeadObj["backColor"] = item->background().color().name();//背景颜色
formHeadObj["text"] = item->text(); formHeadObj["text"] = item->text();
formHeadObj["Font"] = item->font().toString(); formHeadObj["Font"] = item->font().toString();
formHeadObj["FontColor"] = item->foreground().color().name(); formHeadObj["FontColor"] = item->foreground().color().name();
formHeadObj["colWidth"] = m_colWidth; formHeadObj["colWidth"] = my_colWidth;
formHeadObj["rowHeight"] = m_rowHeight; formHeadObj["rowHeight"] = my_rowHeight;
formHeadObj["rowSpan"] = rowSpan;
formHeadObj["columnSpan"] = columnSpan;
} }
subcaseArray.append(formHeadObj); subcaseArray.append(formHeadObj);
} }