diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c1114c..6eba719 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,6 +120,8 @@ set(DATAPANEL_FILES dataPanel/dpBaseChart.cpp dataPanel/dpLineChart.h dataPanel/dpLineChart.cpp + dataPanel/dpBarsChart.h + dataPanel/dpBarsChart.cpp ) # 包含源文件目录 diff --git a/dataPanel/dpBarsChart.cpp b/dataPanel/dpBarsChart.cpp new file mode 100644 index 0000000..ac0f5c0 --- /dev/null +++ b/dataPanel/dpBarsChart.cpp @@ -0,0 +1,98 @@ +#include "dpBarsChart.h" +#include "dataManager.h" + +dpBarsChart::dpBarsChart(QWidget* parent) + :dpBaseChart(parent) +{ + setAttribute(Qt::WA_TranslucentBackground,true); + + m_pCustomPlot = new QCustomPlot(this); + initQCP(); + m_barsGroup = new QCPBarsGroup(m_pCustomPlot); + + QBoxLayout* mainLayout = new QBoxLayout(QBoxLayout::LeftToRight); + mainLayout->setContentsMargins(0, 1, 0, 0); + mainLayout->addWidget(m_pCustomPlot); + setLayout(mainLayout); + + connect(DataManager::instance(), &DataManager::dataUpdated, this, &dpBarsChart::onSignal_dataUpdated); +} + +dpBarsChart::~dpBarsChart() +{ +} + +void dpBarsChart::initQCP() +{ + m_chartStyle.bgColor = Qt::transparent; + m_chartStyle.axisColor = QColor(87, 100, 120); + m_chartStyle.labelColor = QColor(250, 250, 250); + m_chartStyle.labelFont = QFont("黑体", 12); + m_chartStyle.tickColor = QColor(87, 100, 120); + m_chartStyle.tickLabelColor = QColor(250, 250, 250); + m_chartStyle.tickLabelFont = QFont("黑体", 12); + m_chartStyle.gridPen = QPen(QColor(87, 100, 120), 1, Qt::DotLine); + + m_pCustomPlot->setInteractions(QCP::iNone); + /*m_pCustomPlot->axisRect()->setRangeDrag(Qt::Horizontal); //只允许x轴方向的拖拽 + double zoomFactor = m_pCustomPlot->axisRect()->rangeZoomFactor(Qt::Horizontal); + m_pCustomPlot->axisRect()->setRangeZoomFactor(zoomFactor, 1); //只做x轴的缩放*/ + m_pCustomPlot->xAxis->setTicks(false); + m_pCustomPlot->xAxis->setSubTicks(false); + m_pCustomPlot->yAxis->setTicks(false); + m_pCustomPlot->yAxis->setSubTicks(false); + //m_pCustomPlot->yAxis->setVisible(false); + //m_pCustomPlot->yAxis2->setTicks(false); + m_pCustomPlot->yAxis2->setSubTicks(false); + m_pCustomPlot->yAxis2->setVisible(false); + //背景颜色 + m_pCustomPlot->setBackground(QBrush(m_chartStyle.bgColor)); + //坐标轴颜色 + m_pCustomPlot->xAxis->setBasePen(m_chartStyle.axisColor); + m_pCustomPlot->xAxis2->setBasePen(m_chartStyle.axisColor); + m_pCustomPlot->yAxis->setBasePen(m_chartStyle.axisColor); + m_pCustomPlot->yAxis2->setBasePen(m_chartStyle.axisColor); + //坐标刻度颜色 + m_pCustomPlot->xAxis->setTickPen(QPen(m_chartStyle.tickColor)); + m_pCustomPlot->yAxis->setTickPen(QPen(m_chartStyle.tickColor)); + m_pCustomPlot->yAxis2->setTickPen(QPen(m_chartStyle.tickColor)); + //坐标刻度Label颜色 + m_pCustomPlot->xAxis->setTickLabels(false); + m_pCustomPlot->xAxis->setTickLabelColor(m_chartStyle.tickLabelColor); + m_pCustomPlot->xAxis->setTickLabelFont(m_chartStyle.tickLabelFont); + m_pCustomPlot->yAxis->setTickLabels(false); + m_pCustomPlot->yAxis->setTickLabelColor(m_chartStyle.tickLabelColor); + m_pCustomPlot->yAxis->setTickLabelFont(m_chartStyle.tickLabelFont); + m_pCustomPlot->yAxis2->setTickLabelColor(m_chartStyle.tickLabelColor); + m_pCustomPlot->yAxis2->setTickLabelFont(m_chartStyle.tickLabelFont); + //网格线颜色 + m_pCustomPlot->xAxis->grid()->setVisible(false); + m_pCustomPlot->xAxis->grid()->setPen(m_chartStyle.gridPen); + m_pCustomPlot->xAxis->grid()->setZeroLinePen(m_chartStyle.gridPen); + //m_pCustomPlot->xAxis2->grid()->setPen(m_chartStyle.gridPen); + m_pCustomPlot->yAxis->grid()->setVisible(false); + m_pCustomPlot->yAxis->grid()->setPen(m_chartStyle.gridPen); + m_pCustomPlot->yAxis->grid()->setZeroLinePen(m_chartStyle.gridPen); + m_pCustomPlot->yAxis2->grid()->setPen(m_chartStyle.gridPen); + + //Legend + m_pCustomPlot->legend->setBrush(QBrush(QColor(255,255,255,12))); //背景透明 + m_pCustomPlot->legend->setBorderPen(QPen(QColor(255,255,255,0))); //边框透明 + m_pCustomPlot->legend->setFont(m_chartStyle.labelFont); + m_pCustomPlot->legend->setTextColor( m_chartStyle.labelColor); +} + +void dpBarsChart::setTimeRange(TimeUnit unit) +{} + +void dpBarsChart::setDateTime(const QDateTime& dateTime) +{} + +void dpBarsChart::viewHistoricalData(const QDateTime& dateTime) +{} + +void dpBarsChart::synchronizeConfigData(const configurationResults& cfg) +{} + +void dpBarsChart::onSignal_dataUpdated(const QString& dataKey, const QVariant& data, const QDateTime& timestamp) +{} diff --git a/dataPanel/dpBarsChart.h b/dataPanel/dpBarsChart.h new file mode 100644 index 0000000..6d9f834 --- /dev/null +++ b/dataPanel/dpBarsChart.h @@ -0,0 +1,43 @@ +#ifndef DPBARSCHART_H +#define DPBARSCHART_H + +/******************************************************************************* +** DataPanel-BarsChart +** author dsc +** +** 柱状图展示面板,用来展示统计数据(如各类报警、事件的数量) +** 采用QCustomPlot实现 +** +******************************************************************************/ + +#include "dpBaseChart.h" + +class QCustomPlot; +class QCPBarsGroup; + +class dpBarsChart : public dpBaseChart +{ + Q_OBJECT + +public: + dpBarsChart(QWidget *parent = nullptr); + ~dpBarsChart(); + + void setTimeRange(TimeUnit) override; + void setDateTime(const QDateTime&) override; + void viewHistoricalData(const QDateTime&) override; + + void synchronizeConfigData(const configurationResults&) override; + +public slots: + void onSignal_dataUpdated(const QString& dataKey, const QVariant& data, const QDateTime& timestamp); + +private: + void initQCP(); + + QCustomPlot* m_pCustomPlot; + ChartStyle m_chartStyle; + QCPBarsGroup* m_barsGroup; +}; + +#endif diff --git a/dataPanel/dpConfigurationDialog.cpp b/dataPanel/dpConfigurationDialog.cpp index 56256e6..125d735 100644 --- a/dataPanel/dpConfigurationDialog.cpp +++ b/dataPanel/dpConfigurationDialog.cpp @@ -256,8 +256,6 @@ void dpConfigurationDialog::setPanel(DataPanel* pPanel) switch (panelType) { case lineChart: - case curveChart: - case barChart: { ui->specialSettings->setCurrentIndex(0); ui->specialSettings->setVisible(true); @@ -290,6 +288,7 @@ void dpConfigurationDialog::setPanel(DataPanel* pPanel) connect(ui->axisObject, &QComboBox::currentIndexChanged, this, &dpConfigurationDialog::onComboBoxIndexChanged_axis); break; } + case barChart: default: ui->specialSettings->setVisible(false); break; diff --git a/dataPanel/dpLineChart.cpp b/dataPanel/dpLineChart.cpp index 32edd2a..3798608 100644 --- a/dataPanel/dpLineChart.cpp +++ b/dataPanel/dpLineChart.cpp @@ -71,6 +71,7 @@ void dpLineChart::initQCP() m_pCustomPlot->yAxis->setTickLabelFont(m_chartStyle.tickLabelFont); m_pCustomPlot->yAxis2->setTickLabelColor(m_chartStyle.tickLabelColor); m_pCustomPlot->yAxis2->setTickLabelFont(m_chartStyle.tickLabelFont); + m_pCustomPlot->yAxis->setTickLabels(false); //网格线颜色 m_pCustomPlot->xAxis->grid()->setPen(m_chartStyle.gridPen); m_pCustomPlot->xAxis->grid()->setZeroLinePen(m_chartStyle.gridPen); @@ -267,6 +268,7 @@ void dpLineChart::viewHistoricalData(const QDateTime& dateTime) void dpLineChart::synchronizeConfigData(const configurationResults& cfg) { m_updateData = false; //停止更新数据 + //m_pCustomPlot->yAxis->setTickLabels(true); //1.Y坐标轴-数量由数据类型决定 @@ -511,7 +513,7 @@ void dpLineChart::onSignal_rangeChanged_xAxis(const QCPRange& range) m_timeRange = range.size() * 1000; } -void dpLineChart::onSignal_dataUpdated(const QString& dataID, const QVariant& data, const QDateTime& timestamp) +void dpLineChart::onSignal_dataUpdated(const QString& dataID, const QVariant& data, const QDateTime& timestamp) { auto it = m_graphs.find(dataID); if(it != m_graphs.end()) diff --git a/dataPanel/dpLineChart.h b/dataPanel/dpLineChart.h index 59f4a7c..ddc9478 100644 --- a/dataPanel/dpLineChart.h +++ b/dataPanel/dpLineChart.h @@ -31,7 +31,7 @@ public: public slots: void onSignal_rangeChanged_xAxis(const QCPRange&); - void onSignal_dataUpdated(const QString& dataKey, const QVariant& data, const QDateTime& timestamp); + void onSignal_dataUpdated(const QString& dataKey, const QVariant& data, const QDateTime& timestamp); private: //处理关联图形的策略 diff --git a/include/dataPanel.h b/include/dataPanel.h index 567124d..98b53e2 100644 --- a/include/dataPanel.h +++ b/include/dataPanel.h @@ -53,7 +53,7 @@ public: ForceNoScrollArea }; - void setWiget(QWidget*, eInsertMode InsertMode = ForceNoScrollArea); + void setWidget(QWidget*, eInsertMode InsertMode = ForceNoScrollArea); QWidget* takeWidget(); void setName(const QString&); diff --git a/source/dataPanel.cpp b/source/dataPanel.cpp index 2e6410f..f9f9363 100644 --- a/source/dataPanel.cpp +++ b/source/dataPanel.cpp @@ -6,6 +6,7 @@ #include "customMenu.h" #include "dataManager.h" #include "dataPanel/dpLineChart.h" +#include "dataPanel/dpBarsChart.h" #include #include @@ -245,7 +246,13 @@ void DataPanel::createDataWidget() case lineChart: { dpLineChart* lineChart = new dpLineChart(this); - setWiget(lineChart); + setWidget(lineChart); + break; + } + case barChart: + { + dpBarsChart* barsChart = new dpBarsChart(this); + setWidget(barsChart); break; } default: @@ -253,7 +260,7 @@ void DataPanel::createDataWidget() } } -void DataPanel::setWiget(QWidget* pWidget, eInsertMode InsertMode) +void DataPanel::setWidget(QWidget* pWidget, eInsertMode InsertMode) { if(m_pContentWidget) { diff --git a/ui/dpConfigurationDialog.ui b/ui/dpConfigurationDialog.ui index 9b3fc11..303d3ce 100644 --- a/ui/dpConfigurationDialog.ui +++ b/ui/dpConfigurationDialog.ui @@ -618,15 +618,15 @@ background-color: rgb(24, 32, 38); 0 - 110 + 150 521 - 221 + 181 0 - + QWidget #coordinate { @@ -750,22 +750,22 @@ background-color:transparent; Y轴排列: - - - - 0 - 100 - 121 - 31 - - - - 显示图例 - - + + + + 0 + 105 + 121 + 31 + + + + 显示图例 + +