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);
}
相关推荐
长河26 分钟前
Java开发者LLM实战——LangChain4j最新版教学知识库实战
java·开发语言
Cyan_RA936 分钟前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
再见晴天*_*4 小时前
SpringBoot 中单独一个类中运行main方法报错:找不到或无法加载主类
java·开发语言·intellij idea
lqjun08275 小时前
Qt程序单独运行报错问题
开发语言·qt
hdsoft_huge7 小时前
Java & Spring Boot常见异常全解析:原因、危害、处理与防范
java·开发语言·spring boot
风中的微尘7 小时前
39.网络流入门
开发语言·网络·c++·算法
未来之窗软件服务8 小时前
幽冥大陆(二)RDIFSDK 接口文档:布草洗涤厂高效运营的技术桥梁C#—东方仙盟
开发语言·c#·rdif·仙盟创梦ide·东方仙盟
小冯记录编程8 小时前
C++指针陷阱:高效背后的致命危险
开发语言·c++·visual studio
1uther8 小时前
Unity核心概念⑨:Screen
开发语言·游戏·unity·c#·游戏引擎
C_Liu_9 小时前
C++:类和对象(下)
开发语言·c++