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);
}
相关推荐
Bl_a_ck2 分钟前
【JS进阶】ES6 实现继承的方式
开发语言·前端·javascript
愈努力俞幸运25 分钟前
c++ 头文件
开发语言·c++
永日4567031 分钟前
学习日记-day24-6.8
开发语言·学习·php
BillKu31 分钟前
Java后端检查空条件查询
java·开发语言
十五年专注C++开发1 小时前
CMake基础:gcc/g++编译选项详解
开发语言·c++·gcc·g++
vortex51 小时前
探索 Shell:选择适合你的命令行利器 bash, zsh, fish, dash, sh...
linux·开发语言·bash·shell·dash
zzc9211 小时前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
HUN金克斯1 小时前
C++/C函数
c语言·开发语言·c++
慢半拍iii2 小时前
数据结构——F/图
c语言·开发语言·数据结构·c++
钢铁男儿2 小时前
C# 表达式和运算符(表达式和字面量)
开发语言·c#