cpp
复制代码
#include <iostream>
#include <random>
#include <qcategoryaxis.h>
void MainWindow::testLine()
{
//1、创建图表视图
QChartView* view = new QChartView(this);
//2.创建图表
QChart* chart = new QChart();
//3.将图表设置给图表视图
view->setChart(chart);
//设置标题
chart->setTitle("");
chart->legend()->show();//显示或者隐藏图例(默认显示)
//4.构建x轴-日期时间轴
QDateTimeAxis* axisX = new QDateTimeAxis(this);
//设置轴的标题
axisX->setTitleText("");
//设置时间轴的范围,参数是两个时期时间QDateTime
axisX->setRange(QDateTime(QDate(2000, 01, 01), QTime(0, 0, 0)),
QDateTime(QDate(2000, 01, 10), QTime(0, 0, 0)));
//设置刻度个数,刻度数算不好会会导致X轴看起来没有对中一样
axisX->setTickCount(10);
//设置刻度值的格式,和格式化时间字符串一样
axisX->setFormat("MM.dd");
axisX->setLabelsAngle(45);
//添加轴
chart->addAxis(axisX, Qt::AlignBottom);
//5.构建y轴-数值轴
QValueAxis* axisY = new QValueAxis(this);
axisY->setRange(0, 100);
axisY->setTickCount(11);
axisY->setTitleText("Y");
chart->addAxis(axisY, Qt::AlignLeft);
//6.构建折线系列
QLineSeries* line = new QLineSeries();
//设置图例文本
line->setName("tar");
QLineSeries* line2 = new QLineSeries();
//设置图例文本
line2->setName("reality");
for (int i = 0; i < 7; i++)
{
QString strDate = QString("%1.%2.%3").arg(2000).arg(1).arg(i + 1);
{
std::random_device rd; // 用于获取随机数种子
std::mt19937 gen(rd()); // 以 rd() 作为种子的 Mersenne Twister 引擎
// 定义一个均匀分布的整数范围 [1, 100]
std::uniform_int_distribution<> dis(1, 100);
line->append(QDateTime(QDate::fromString(strDate, "yyyy.M.d"), QTime(0, 0, 0)).toMSecsSinceEpoch(), dis(gen));
}
{
std::random_device rd; // 用于获取随机数种子
std::mt19937 gen(rd()); // 以 rd() 作为种子的 Mersenne Twister 引擎
// 定义一个均匀分布的整数范围 [1, 100]
std::uniform_int_distribution<> dis(1, 100);
line2->append(QDateTime(QDate::fromString(strDate, "yyyy.M.d"), QTime(0, 0, 0)).toMSecsSinceEpoch(), dis(gen));
}
}
//显示标签
line->setPointLabelsVisible(true);
line2->setPointLabelsVisible(true);
//显示标签格式
line->setPointLabelsFormat("(@yPoint)");
line2->setPointLabelsFormat("(@yPoint)");
//显示标签裁剪
line->setPointLabelsClipping(false);
line2->setPointLabelsClipping(false);
chart->addSeries(line);
chart->addSeries(line2);
//7、将xy轴附加到折线
line->attachAxis(axisX);
line->attachAxis(axisY);
line2->attachAxis(axisX);
line2->attachAxis(axisY);
setCentralWidget(view);
}