#include "stockpolicy.h" #include "ui_stockpolicy.h" #include #include #pragma execution_character_set("utf-8") StockPolicy::StockPolicy(QWidget *parent) : QMainWindow(parent), ui(new Ui::StockPolicy) { ui->setupUi(this); initUi(); } StockPolicy::~StockPolicy() { delete ui; } void StockPolicy::initUi() { m_chart = new QChart; m_chart->setTitle("趋势查看"); m_chart->setBackgroundBrush(QColor(255,255,255)); // 用于设置背景色的 QColor(10,10,10) r,g,b 红绿蓝3原色 QLineSeries *series = new QLineSeries; // 用于存放数据的系列,相当于存了XY对应数据的容器 series->setName("示例图"); series->append(1686240000000,17.63); // X Y的值 series->append(1686844800000,19.31); series->append(1687276800000,30.11); series->append(1688054400000,19.31); series->append(1688659200000,50.81); m_chart->addSeries(series); m_dtAx = new QDateTimeAxis; // X轴,时间轴 m_dtAx->setFormat("yyyy-MM-dd"); // 设置时间格式 m_dtAx->setTitleText("时间"); m_dtAx->setTickCount(10); // 设置网格数 m_chart->setAxisX(m_dtAx,series); // 设置 X轴为时间轴、数据 m_axisY = new QValueAxis; // Y轴 m_axisY->setTickCount(10); // 设置格数 m_axisY->setRange(0,1500); // 设置Y值的范围 m_chart->setAxisY(m_axisY,series); // 设置 Y轴为数据轴、数据 setLastMarkerShowAndAlpha(); // 设置当前最后一个标记曲线和标签的显示及透明度情况 m_chartView = new QChartView(m_chart); // 框选放大,右键缩小 m_chartView->setRubberBand(QChartView::HorizontalRubberBand); // 设置鼠标左击框选放大,右击缩小 m_chartView->setRenderHint(QPainter::Antialiasing,true); this->setCentralWidget(m_chartView); // 将表视图放到中心部件来显示,可以做到自适应大小 } // 设置当前最后一个标记曲线和标签的显示及透明度情况 void StockPolicy::setLastMarkerShowAndAlpha() { QLegendMarker* marker = m_chart->legend()->markers().back(); connect(marker,QOverload<>::of(&QLegendMarker::clicked),this,[=]{ marker->series()->setVisible(!marker->series()->isVisible()); // 取反,可见时不可见,不可见时变可见 marker->setVisible(true); // 把图例标题显示处理 qreal alpha = 1.0; // 透明度,完全不透明 if(!marker->series()->isVisible()) alpha = 0.5; // 不可见时透明度 50% // 设置透明度相关,主要是设置图例标签的透明度 QBrush brush = marker->labelBrush(); QColor color = brush.color(); color.setAlphaF(alpha); brush.setColor(color); marker->setLabelBrush(brush); }); } void StockPolicy::showNewStockData(QLineSeries *series) { m_chart->addSeries(series); // 添加数据到图表 m_chart->setAxisX(m_dtAx,series); // 设置 X轴为时间轴、数据 m_chart->setAxisY(m_axisY,series); // 设置 Y轴为数据轴、数据 setLastMarkerShowAndAlpha(); // 设置当前最后一个标记曲线和标签的显示及透明度情况 } void StockPolicy::showNewStockData(QSplineSeries *series) { m_chart->addSeries(series); // 添加数据到图表 m_chart->setAxisX(m_dtAx,series); // 设置 X轴为时间轴、数据 m_chart->setAxisY(m_axisY,series); // 设置 Y轴为数据轴、数据 setLastMarkerShowAndAlpha(); // 设置当前最后一个标记曲线和标签的显示及透明度情况 }