feat:柱形图数据面板中增加析构时实时数据请求取消逻辑

This commit is contained in:
duanshengchao 2026-01-29 16:50:24 +08:00
parent b9d43a7882
commit 5814b2babe
3 changed files with 23 additions and 1 deletions

View File

@ -132,6 +132,8 @@ dpBarsChart::dpBarsChart(QWidget* parent)
dpBarsChart::~dpBarsChart()
{
if(!m_requestDataList.isEmpty())
MeasurementDataManager::instance()->cancelRequest(m_requestDataList, this);
}
void dpBarsChart::initQCP()
@ -244,6 +246,8 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg)
QVector<QString> tickLabels;
QHash<RealTimeDataType, QSet<QString>> groupedBars; //按数据类型对bar进行分组以实现可以按组放置以及设置颜色等操作
QStringList newRequestDataList;
QStringList cancelRequestDataList;
for(int i = 0; i < cfg.m_pModel_dataSource->rowCount(); i++)
{
QString itemText = cfg.m_pModel_dataSource->item(i, 0)->text();
@ -293,8 +297,25 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg)
double randomFloat = min + QRandomGenerator::global()->generateDouble() * (max - min);
return QVariant::fromValue(randomFloat);
});*/
newRequestDataList << dataID;
}
QSet dataSet(newRequestDataList.begin(), newRequestDataList.end());
for(const QString& data : std::as_const(m_requestDataList))
{
if(!dataSet.contains(data))
cancelRequestDataList << data;
}
//获取实时数据
if(!cancelRequestDataList.isEmpty())
MeasurementDataManager::instance()->cancelRequest(cancelRequestDataList, this);
if(!newRequestDataList.isEmpty())
MeasurementDataManager::instance()->requestData(newRequestDataList, this);
m_requestDataList = QStringList(std::move(newRequestDataList));
if(groupByType)
{
for(auto it = groupedBars.begin(); it != groupedBars.end(); ++it)

View File

@ -81,6 +81,7 @@ private:
QHash<QString, Bars> m_bars;
QHash<RealTimeDataType, QCPBarsGroup*> m_barsGroups;
bool m_updateData;
QStringList m_requestDataList;
};
#endif

View File

@ -309,7 +309,7 @@ void MeasurementDataManager::requestData(const QStringList& measurements, QObjec
for(const QString& dataID : measurements)
{
auto it = m_dataRequesetRecord.find(dataID);
if(it != m_dataRequesetRecord.end() && !it.value().contains(requester))
if(it != m_dataRequesetRecord.end()/* && !it.value().contains(requester)*/)
it.value().insert(requester);
else
{