diff --git a/dataPanel/dpConfigurationDialog.cpp b/dataPanel/dpConfigurationDialog.cpp index 3e4dcec..0c5ad34 100644 --- a/dataPanel/dpConfigurationDialog.cpp +++ b/dataPanel/dpConfigurationDialog.cpp @@ -207,7 +207,7 @@ void dpConfigurationDialog::createDataSourceList() tempItem->setData("point", Qt::UserRole + itemRole_tag); tempItem->setData(i, Qt::UserRole + itemRole_stationID); tempItem->setData(0, Qt::UserRole + itemRole_componentID); - tempItem->setData(2, Qt::UserRole + itemRole_pointID); + tempItem->setData(3, Qt::UserRole + itemRole_pointID); tempItem->setData(RealTimeDataType::temperature, Qt::UserRole + itemRole_dataType); componentItem->appendRow(tempItem); } diff --git a/dataPanel/dpLineChart.cpp b/dataPanel/dpLineChart.cpp index fbe252f..a596e8f 100644 --- a/dataPanel/dpLineChart.cpp +++ b/dataPanel/dpLineChart.cpp @@ -203,7 +203,15 @@ void dpLineChart::setDateTime(const QDateTime& dateTime) m_curDateTime = dateTime; if(m_updateData) - {} + { + //模拟数据展示 + double min = 0, max = 5.0; + for(auto it = m_graphs.begin(); it != m_graphs.end(); ++it) + { + double randomFloat = min + QRandomGenerator::global()->generateDouble() * (max - min); + it.value().qGraph->addData(timeValue, randomFloat); + } + } } void dpLineChart::viewHistoricalData(const QDateTime& dateTime) @@ -263,23 +271,26 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg) // else // ++it; // } - QMutableHashIterator it(m_graphs); //使用QMutableHashIterator可以再遍历相关容器的同时安全的修改,例如删除元素 - while (it.hasNext()) - { - it.next(); - if (it.value().qGraph.isNull() || it.value().qGraph->valueAxis() == axis.qAxis) - it.remove(); // 直接删除当前项,无需手动管理迭代器 - } for(int j = 0; j < m_pCustomPlot->graphCount();) { QCPGraph* graph = m_pCustomPlot->graph(j); if(graph->valueAxis() == axis.qAxis) { - m_pCustomPlot->removeGraph(graph); + m_pCustomPlot->removeGraph(graph); //removeGraph时graph会被delete } else ++j; } + QMutableHashIterator it(m_graphs); //使用QMutableHashIterator可以再遍历相关容器的同时安全的修改,例如删除元素 + while (it.hasNext()) + { + it.next(); + if (it.value().qGraph.isNull()/*it.value().qGraph->valueAxis() == axis.qAxis*/) //利用QPointer特性保持数据同步 + { + //m_pCustomPlot->removeGraph(it.value().qGraph); + it.remove(); // 直接删除当前项,无需手动管理迭代器 + } + } //删除轴 m_pCustomPlot->axisRect()->removeAxis(axis.qAxis); m_axes.remove(i); @@ -373,13 +384,17 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg) arrangeAxes(); //2.曲线-数据源决定 + //qDebug() << "m_graphs before update: " << m_graphs.keys(); for(int i = 0; i < cfg.m_pModel_dataSource->rowCount(); i++) { 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 pointID = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_pointID).toString(); - QString graphID = stationID + "-" + compoentID + "-" + pointID; + //qDebug() << "update:" << graphID; + + QVariant colorData = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::DecorationRole); + if(!m_graphs.contains(graphID)) //新增数据 { RealTimeDataType dataType = (RealTimeDataType)cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt(); @@ -394,7 +409,6 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg) QCPGraph* newGraph = m_pCustomPlot->addGraph(m_pCustomPlot->xAxis, valueAxis); if(newGraph) { - QVariant colorData = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::DecorationRole); if(colorData.isValid()) { QColor color = colorData.value(); @@ -409,9 +423,17 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg) //m_graphs.value(graphID).synchronizeTagging = "update"; auto it = m_graphs.find(graphID); if(it != m_graphs.end()) + { + if(colorData.isValid()) + { + QColor color = colorData.value(); + it.value().qGraph->setPen(QPen(color)); + } it.value().synchronizeTagging = "update"; + } } } + //qDebug() << "m_graphs after update: " << m_graphs.keys(); //没有标记的就是需要删除的 QStringList keysToRemove; for(auto it = m_graphs.begin(); it != m_graphs.end(); ++it) @@ -428,7 +450,7 @@ void dpLineChart::synchronizeConfigData(const configurationResults& cfg) qWarning() << "Failed to remove gracloxne ph:" << key; } - qDebug() << "graph count: " << m_graphs.count() << ", " << m_pCustomPlot->graphCount(); + //qDebug() << "graph count: " << m_graphs.count() << ", " << m_pCustomPlot->graphCount(); m_updateData = true; }