diff --git a/dataPanel/dpBarsChart.cpp b/dataPanel/dpBarsChart.cpp index c5913ec..999849a 100644 --- a/dataPanel/dpBarsChart.cpp +++ b/dataPanel/dpBarsChart.cpp @@ -7,7 +7,9 @@ dpBarsChart::dpBarsChart(QWidget* parent) setAttribute(Qt::WA_TranslucentBackground,true); m_pCustomPlot = new QCustomPlot(this); - m_barsGroup = new QCPBarsGroup(m_pCustomPlot); + /* m_pBarsGroup = new QCPBarsGroup(m_pCustomPlot); + m_pBarsGroup->setSpacingType(QCPBarsGroup::stAbsolute); + m_pBarsGroup->setSpacing(2); */ initQCP(); QBoxLayout* mainLayout = new QBoxLayout(QBoxLayout::LeftToRight); @@ -94,10 +96,12 @@ void dpBarsChart::viewHistoricalData(const QDateTime& dateTime) void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) { //先清除现有图形(直方图不像曲线一样有连续的过程展现,所以不采用动态更新,每次都清除、重新创建) + //m_pBarsGroup->clear(); m_pCustomPlot->clearPlottables(); m_bars.clear(); + m_barsGroups.clear(); - bool groupByType = false; + bool groupByType = cfg.groupByType; //设定朝向 QCPAxis* keyAxis = nullptr; @@ -112,7 +116,7 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) keyAxis = m_pCustomPlot->yAxis; valueAxis = m_pCustomPlot->xAxis; } - if(!keyAxis && !valueAxis) + if(!keyAxis || !valueAxis) return; QVector ticks; @@ -130,20 +134,6 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) QVariant colorData = cfg.m_pModel_dataSource->item(i, 0)->data(Qt::DecorationRole); RealTimeDataType dataType = (RealTimeDataType)cfg.m_pModel_dataSource->item(i, 0)->data(Qt::UserRole + itemRole_dataType).toInt(); - /*QCPBarsGroup* barsGroup = nullptr; - if(!m_barsGroups.contains(dataType)) - { - barsGroup = new QCPBarsGroup(m_pCustomPlot); - m_barsGroups.insert(dataType, barsGroup); - } - else - { - barsGroup = m_barsGroups.value(dataType); - } - - if(!barsGroup) - continue;*/ - Bars bars; bars.name = itemText; bars.dataID = dataID; @@ -156,7 +146,16 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) bars.qBars = qBars; if(groupByType) + { groupedBars[dataType].insert(dataID); + //每一个类型创建一个QCPBarsGroup对象 + QCPBarsGroup* barsGroup = nullptr; + if(!m_barsGroups.contains(dataType)) + { + barsGroup = new QCPBarsGroup(m_pCustomPlot); + m_barsGroups.insert(dataType, barsGroup); + } + } else { ticks << ++tick; @@ -200,15 +199,17 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) } } - QSharedPointer textTicker(new QCPAxisTickerText); - textTicker->addTicks(ticks, tickLabels); - keyAxis->setTicker(textTicker); - keyAxis->setRange(1, ticks.count()); + //Axis if(groupByType) keyAxis->setTickLabels(true); else keyAxis->setTickLabels(false); + QSharedPointer textTicker(new QCPAxisTickerText); + textTicker->addTicks(ticks, tickLabels); + keyAxis->setTicker(textTicker); + keyAxis->setRange(0, ticks.count() + 1); + valueAxis->setTickLabels(true); valueAxis->setRange(0, 11); @@ -222,13 +223,22 @@ void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) double randomVaule = 1 + QRandomGenerator::global()->generateDouble() * (8 - 1); values << randomVaule; - it.value().qBars->setData(it.value().keys, values); - if(groupByType) - it.value().qBars->setBarsGroup(m_barsGroup); + Bars bar = it.value(); + bar.qBars->setData(bar.keys, values); + if(groupByType && m_barsGroups.value(bar.dataType)) + { + bar.qBars->setWidthType(QCPBars::wtPlotCoords); + //bar.qBars->setWidth(bar.qBars->width() / groupedBars.value(bar.dataType).count()); + bar.qBars->setWidth(bar.qBars->width() * ticks.count() / m_bars.count()); + bar.qBars->setBarsGroup(m_barsGroups.value(bar.dataType)); + } } //Legend - m_pCustomPlot->legend->setVisible(cfg.showLegend); + if(cfg.showLegend && m_bars.count() > 0) + m_pCustomPlot->legend->setVisible(true); + else + m_pCustomPlot->legend->setVisible(false); m_pCustomPlot->replot(); } diff --git a/dataPanel/dpBarsChart.h b/dataPanel/dpBarsChart.h index 6baa37f..c85e8bf 100644 --- a/dataPanel/dpBarsChart.h +++ b/dataPanel/dpBarsChart.h @@ -53,9 +53,9 @@ private: QCustomPlot* m_pCustomPlot; ChartStyle m_chartStyle; - QCPBarsGroup* m_barsGroup; + //QCPBarsGroup* m_pBarsGroup; QHash m_bars; - //QHash m_barsGroups; + QHash m_barsGroups; }; #endif diff --git a/dataPanel/dpConfigurationDialog.cpp b/dataPanel/dpConfigurationDialog.cpp index e0b4de4..61e44b6 100644 --- a/dataPanel/dpConfigurationDialog.cpp +++ b/dataPanel/dpConfigurationDialog.cpp @@ -251,6 +251,7 @@ void dpConfigurationDialog::setPanel(DataPanel* pPanel) ui->serviceIP->setText(pPanel->m_cofigurationResults.dataServiceIP); ui->servicePort->setText(QString::number(pPanel->m_cofigurationResults.dataServicePort)); ui->radioBtn_showLegend->setChecked(pPanel->m_cofigurationResults.showLegend); + ui->radioBtn_groupByType->setChecked(pPanel->m_cofigurationResults.groupByType); DataPanelType panelType = pPanel->getType(); switch (panelType) @@ -362,6 +363,7 @@ void dpConfigurationDialog::onBtnClicked_confirm() m_pDataPanel->m_cofigurationResults.dataServiceIP = ui->serviceIP->text(); m_pDataPanel->m_cofigurationResults.dataServicePort = ui->servicePort->text().toInt(); m_pDataPanel->m_cofigurationResults.showLegend = ui->radioBtn_showLegend->isChecked(); + m_pDataPanel->m_cofigurationResults.groupByType = ui->radioBtn_groupByType->isChecked(); m_pDataPanel->m_cofigurationResults.axisArrangement = (AxisArrangementMode)ui->axisArrangement->currentIndex(); DataPanelType panelType = m_pDataPanel->getType(); diff --git a/dataPanel/dpGlobals.h b/dataPanel/dpGlobals.h index e007772..22004e9 100644 --- a/dataPanel/dpGlobals.h +++ b/dataPanel/dpGlobals.h @@ -47,6 +47,7 @@ struct configurationResults QString dataServiceIP; int dataServicePort; bool showLegend; + bool groupByType; AxisArrangementMode axisArrangement; BarOrientation barOrientataion; QHash axisCfgMap; //可能有多个轴(数据类别) @@ -60,6 +61,7 @@ struct configurationResults dataServicePort = 1987; showLegend = false; + groupByType = false; axisArrangement = AlternateSides; barOrientataion = Vertical; } diff --git a/ui/dpConfigurationDialog.ui b/ui/dpConfigurationDialog.ui index ad369cb..4c3706b 100644 --- a/ui/dpConfigurationDialog.ui +++ b/ui/dpConfigurationDialog.ui @@ -337,7 +337,7 @@ QPushButton:pressed 25 - 120 + 110 521 331 @@ -624,7 +624,7 @@ background-color: rgb(24, 32, 38); - 1 + 0 @@ -762,7 +762,7 @@ background-color:transparent; 80 - 10 + 0 91 22 @@ -782,7 +782,7 @@ background-color:transparent; 0 - 10 + 0 71 21 @@ -791,11 +791,11 @@ background-color:transparent; 图形朝向: - + 0 - 40 + 30 161 31 @@ -811,13 +811,16 @@ background-color:transparent; 0 110 - 121 + 161 31 显示图例 + + false +