自学内容网 自学内容网

Qt-chart 画折线图(以时间为x轴)

上图

在这里插入图片描述

代码

#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);
}


原文地址:https://blog.csdn.net/GreedySnaker/article/details/144418622

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!