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);
}
相关推荐
dong__csdn6 分钟前
jdk添加信任证书
java·开发语言
南 阳37 分钟前
Python从入门到精通day64
开发语言·python
花千树-0101 小时前
Java 接入多家大模型 API 实战对比
java·开发语言·人工智能·ai·langchain·ai编程
上海合宙LuatOS2 小时前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
feng_you_ying_li2 小时前
C++11,{}的初始化情况与左右值及其引用
开发语言·数据结构·c++
xiaotao1312 小时前
JS new 操作符完整执行过程
开发语言·前端·javascript·原型模式
TE-茶叶蛋2 小时前
结合登录页-PHP基础知识点解析
android·开发语言·php
无巧不成书02182 小时前
Java包(package)全解:从定义、使用到避坑,新手零基础入门到实战
java·开发语言·package·java包
WangJunXiang62 小时前
Python网络编程
开发语言·网络·python
guhy fighting2 小时前
new Map,Array.from,Object.entries的作用以及使用方法
开发语言·前端·javascript