fix:修复chart图元(graph)随坐标轴动态删减自定义数据对象数据和QCustomPlot中graphs同步不一致问题
This commit is contained in:
parent
b02902a0ef
commit
338baafe74
|
|
@ -146,6 +146,7 @@ void dpConfigurationDialog::copyModelData(QStandardItemModel* sourceModel, QStan
|
||||||
{
|
{
|
||||||
QStandardItem* newItem = new QStandardItem(item->text());
|
QStandardItem* newItem = new QStandardItem(item->text());
|
||||||
QString strTag = item->data(Qt::UserRole + itemRole_tag).toString();
|
QString strTag = item->data(Qt::UserRole + itemRole_tag).toString();
|
||||||
|
newItem->setData(strTag, Qt::UserRole + itemRole_tag);
|
||||||
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")
|
if(strTag == "point")
|
||||||
|
|
|
||||||
|
|
@ -270,13 +270,15 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
|
||||||
if (it.value().qGraph.isNull() || it.value().qGraph->valueAxis() == axis.qAxis)
|
if (it.value().qGraph.isNull() || it.value().qGraph->valueAxis() == axis.qAxis)
|
||||||
it.remove(); // 直接删除当前项,无需手动管理迭代器
|
it.remove(); // 直接删除当前项,无需手动管理迭代器
|
||||||
}
|
}
|
||||||
for(int j = 0; j < m_pCustomPlot->graphCount(); j++)
|
for(int j = 0; j < m_pCustomPlot->graphCount();)
|
||||||
{
|
{
|
||||||
QCPGraph* graph = m_pCustomPlot->graph(j);
|
QCPGraph* graph = m_pCustomPlot->graph(j);
|
||||||
if(graph->valueAxis() == axis.qAxis)
|
if(graph->valueAxis() == axis.qAxis)
|
||||||
{
|
{
|
||||||
m_pCustomPlot->removeGraph(graph);
|
m_pCustomPlot->removeGraph(graph);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
++j;
|
||||||
}
|
}
|
||||||
//删除轴
|
//删除轴
|
||||||
m_pCustomPlot->axisRect()->removeAxis(axis.qAxis);
|
m_pCustomPlot->axisRect()->removeAxis(axis.qAxis);
|
||||||
|
|
@ -355,10 +357,16 @@ 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, &m_axes.last()); //临时变量axesMap通过做更新,此处不要直接使用&axis,因为axis是局部变量,地址会被自动释放,造成堆错误
|
//axesMap.insert(axis._cfg.dataType, &m_axes.last()); //临时变量axesMap通过做更新,此处不要直接使用&axis,因为axis是局部变量,地址会被自动释放,造成堆错误
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//更新axesMap
|
||||||
|
axesMap.clear();
|
||||||
|
for(auto& axis : m_axes)
|
||||||
|
{
|
||||||
|
axesMap.insert(axis._cfg.dataType, &axis);
|
||||||
|
}
|
||||||
|
|
||||||
//重新排列坐标轴
|
//重新排列坐标轴
|
||||||
m_axisArrangementMode = cfg.arrangement;
|
m_axisArrangementMode = cfg.arrangement;
|
||||||
|
|
@ -398,7 +406,10 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
|
||||||
}
|
}
|
||||||
else //更新数据
|
else //更新数据
|
||||||
{
|
{
|
||||||
m_graphs.value(graphID).synchronizeTagging = "update";
|
//m_graphs.value(graphID).synchronizeTagging = "update";
|
||||||
|
auto it = m_graphs.find(graphID);
|
||||||
|
if(it != m_graphs.end())
|
||||||
|
it.value().synchronizeTagging = "update";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//没有标记的就是需要删除的
|
//没有标记的就是需要删除的
|
||||||
|
|
@ -414,10 +425,10 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg)
|
||||||
{
|
{
|
||||||
Graph g = m_graphs.take(key);
|
Graph g = m_graphs.take(key);
|
||||||
if( !m_pCustomPlot->removeGraph(g.qGraph) )
|
if( !m_pCustomPlot->removeGraph(g.qGraph) )
|
||||||
qWarning() << "Failed to remove graph:" << key;
|
qWarning() << "Failed to remove gracloxne ph:" << key;
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << m_graphs.count();
|
qDebug() << "graph count: " << m_graphs.count() << ", " << m_pCustomPlot->graphCount();
|
||||||
|
|
||||||
m_updateData = true;
|
m_updateData = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue