#include "stockpolicy.h" #include "ui_stockpolicy.h" #include <QDebug> #include <QLegendMarker> 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(); // è®¾ç½®å½“å‰æœ€åŽä¸€ä¸ªæ ‡è®°æ›²çº¿å’Œæ ‡ç¾çš„æ˜¾ç¤ºåŠé€æ˜Žåº¦æƒ…况 }