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);
}
相关推荐
黄贵根2 小时前
JavaScript实现教培行业意向登记系统
开发语言·javascript·ecmascript
zzzll11115 小时前
Claude Code离线安装方案揭秘
开发语言·php
wling03015 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
郝学胜-神的一滴6 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
我是小灰灰吖6 小时前
Ubuntu 22.04 安装 SSH 服务与远程调试环境配置指南
qt·ubuntu·ssh
xrandzj6 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
DLYSB_7 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
雨田言炎9 小时前
四、关于Qt项目需要知道的
开发语言·笔记·qt
程序喵大人10 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
SomeB1oody10 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程