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

上图

代码

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);
}
相关推荐
没有梦想的咸鱼185-1037-166311 小时前
基于R语言机器学习方法在生态经济学领域中的实践技术应用
开发语言·机器学习·数据分析·r语言
向上的车轮12 小时前
基于go语言的云原生TodoList Demo 项目,验证云原生核心特性
开发语言·云原生·golang
The Chosen One98512 小时前
C++ : AVL树-详解
开发语言·c++
SNAKEpc1213812 小时前
QML和Qt Quick
c++·qt
PH_modest12 小时前
【Qt跬步积累】—— 初识Qt
开发语言·qt
怀旧,12 小时前
【C++】18. 红⿊树实现
开发语言·c++
xiaopengbc13 小时前
在 Python 中实现观察者模式的具体步骤是什么?
开发语言·python·观察者模式
Python大数据分析@13 小时前
python用selenium怎么规避检测?
开发语言·python·selenium·网络爬虫
ThreeAu.13 小时前
Miniconda3搭建Selenium的python虚拟环境全攻略
开发语言·python·selenium·minicoda·python环境配置
zhangfeng113313 小时前
R 语法高亮为什么没有,是需要安装专用的编辑软件,R语言自带的R-gui 功能还是比较简单
开发语言·r语言