fix:修复dataPanle配置时,选择多个数据源(多条曲线)造成的程序崩溃(由于引用了局部变量的地址)问题

This commit is contained in:
duanshengchao 2025-08-04 10:57:53 +08:00
parent 6386d00229
commit b02902a0ef
3 changed files with 21 additions and 3 deletions

View File

@ -99,11 +99,18 @@ protected:
{ {
QColor color; QColor color;
RealTimeDataType dataType; RealTimeDataType dataType;
//QCPGraph* qGraph = nullptr; //QCPGraph* qGraph;
QPointer<QCPGraph> qGraph; QPointer<QCPGraph> qGraph;
QString dataID; QString dataID;
QString synchronizeTagging; //同步配置数据时的标记new、update两种没有的就是要被删除 QString synchronizeTagging; //同步配置数据时的标记new、update两种没有的就是要被删除
Graph()
{
dataID = "";
//qGraph = nullptr;
synchronizeTagging = "noTagging";
}
}; };
}; };

View File

@ -145,9 +145,16 @@ void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStan
if(item) if(item)
{ {
QStandardItem* newItem = new QStandardItem(item->text()); QStandardItem* newItem = new QStandardItem(item->text());
newItem->setData(item->data(Qt::DecorationRole), Qt::DecorationRole); QString strTag = item->data(Qt::UserRole + itemRole_tag).toString();
RealTimeDataType dataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt(); RealTimeDataType dataType = (RealTimeDataType)item->data(Qt::UserRole + itemRole_dataType).toInt();
newItem->setData(dataType, Qt::UserRole + itemRole_dataType); newItem->setData(dataType, Qt::UserRole + itemRole_dataType);
if(strTag == "point")
{
newItem->setData(item->data(Qt::DecorationRole), Qt::DecorationRole);
newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID);
newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID);
newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID);
}
itemList.push_back(newItem); itemList.push_back(newItem);
} }
} }
@ -521,6 +528,7 @@ void dpConfigurationDialog::onItemClicked_dataSource(const QModelIndex& index)
{ {
QStandardItem* newItem = new QStandardItem(strText); QStandardItem* newItem = new QStandardItem(strText);
newItem->setEditable(false); newItem->setEditable(false);
newItem->setData(item->data(Qt::UserRole + itemRole_tag), Qt::UserRole + itemRole_tag);
newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID); newItem->setData(item->data(Qt::UserRole + itemRole_stationID), Qt::UserRole + itemRole_stationID);
newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID); newItem->setData(item->data(Qt::UserRole + itemRole_componentID), Qt::UserRole + itemRole_componentID);
newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID); newItem->setData(item->data(Qt::UserRole + itemRole_pointID), Qt::UserRole + itemRole_pointID);

View File

@ -355,7 +355,7 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
axis.setQCPAxis(pAxis, false); axis.setQCPAxis(pAxis, false);
} }
m_axes.append(axis); m_axes.append(axis);
axesMap.insert(axis._cfg.dataType, &axis); //临时变量axesMap通过做更新 axesMap.insert(axis._cfg.dataType, &m_axes.last()); //临时变量axesMap通过做更新,此处不要直接使用&axis因为axis是局部变量地址会被自动释放造成堆错误
#endif #endif
} }
} }
@ -370,6 +370,7 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
QString stationID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_stationID).toString(); QString stationID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_stationID).toString();
QString compoentID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_componentID).toString(); QString compoentID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_componentID).toString();
QString pointID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_pointID).toString(); QString pointID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_pointID).toString();
QString graphID = stationID + "-" + compoentID + "-" + pointID; QString graphID = stationID + "-" + compoentID + "-" + pointID;
if(!m_graphs.contains(graphID)) //新增数据 if(!m_graphs.contains(graphID)) //新增数据
{ {
@ -416,6 +417,8 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
qWarning() << "Failed to remove graph:" << key; qWarning() << "Failed to remove graph:" << key;
} }
qDebug() << m_graphs.count();
m_updateData = true; m_updateData = true;
} }