QChart时间坐标轴实时更新数据

效果图

开始

在这里插入图片描述

更新

在这里插入图片描述

include包

#include <QChartView>
#include <QtCharts/QChartView>

#include <QValueAxis>
#include <QDateTimeAxis>
#include <QSplineSeries>
#include <QDateTimeAxis>

QChart初始化

	mAxY = new QValueAxis();
	mAxDateX = new QDateTimeAxis();
	mSeries = new QLineSeries();

	mAxY->setRange(0, yMax);
	mAxY->setTickCount(6);	

	mAxDateX->setFormat("yyyy-M-d HH:mm s");// 145°时:"yyyy-M-d HH:mm s\""
	mAxDateX->setLabelsAngle(60);
	mAxDateX->setTickCount(11);
	
	this->chart()->addSeries(mSeries);
	this->chart()->setTheme(QtCharts::QChart::ChartThemeBrownSand);
	this->chart()->setTitle("QDateTimeAxis_Demo");
	this->chart()->legend()->hide();
	this->chart()->addAxis(mAxY, Qt::AlignLeft);
	this->chart()->addAxis(mAxDateX, Qt::AlignBottom);
	
	mSeries->attachAxis(mAxY);// 此二句一定要放在 this->chart()->addAxis 语句之后,不然
	mSeries->attachAxis(mAxDateX);// 没有曲线显示
	

定时器刷新SLOT函数

void timeChart::updateSeries()
{
	static int cnt = 0;
	static QDateTime BeginTime, EndTime;

	if (FirstIn)
	{
		FirstIn = false;
		BeginTime = QDateTime::currentDateTime();
		EndTime = BeginTime.addMSecs(MaxSize*(TimerBreaks + 1));
		mAxDateX->setMin(BeginTime);
		mAxDateX->setMax(EndTime);
	}	

	qint64 x1 = QDateTime::currentMSecsSinceEpoch();
	
	qreal y = yMax / 2 + (yMax / 2.0)*sin(omiGa*cnt);
	cnt = cnt > (MaxSize - 1) ? 1 : (++cnt);

	if (mSeries->count() > (MaxSize-1))
	{
		mSeries->removePoints(0, 1);
		EndTime = QDateTime::currentDateTime();
		BeginTime = EndTime.addMSecs((qint64)MaxSize*(-1)*TimerBreaks);
	
		mAxDateX->setMin(BeginTime);
		mAxDateX->setMax(EndTime);
	}
	mSeries->append(x1, y);
	mSeries->show();
}

具体实现demo,可下载:https://download.csdn.net/download/birenxiaofeigg/11340358

  • 11
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
要设置QChart跟随时间移动坐标轴,可以按照以下步骤进行操作: 1. 创建一个QChart对象,并将其设置为视图的图表: ```cpp QChart *chart = new QChart(); chartView->setChart(chart); ``` 2. 创建一个QValueAxis对象,用于表示时间轴: ```cpp QValueAxis *timeAxis = new QValueAxis(); chart->addAxis(timeAxis, Qt::AlignBottom); // 将时间轴添加到图表中,并指定对齐方式为底部 ``` 3. 设置时间轴的范围和显示格式: ```cpp QDateTime startTime = QDateTime::currentDateTime(); // 获取当前时间作为起始时间 QDateTime endTime = startTime.addSecs(60); // 结束时间为起始时间+60秒 timeAxis->setRange(startTime, endTime); // 设置时间范围 timeAxis->setTickCount(6); // 设置显示的时间刻度数量 timeAxis->setFormat("hh:mm:ss"); // 设置时间的显示格式 ``` 4. 创建一个QLineSeries对象,并将其添加到图表中,并将时间轴与该系列关联: ```cpp QLineSeries *series = new QLineSeries(); chart->addSeries(series); series->attachAxis(timeAxis); // 将时间轴与系列关联 ``` 5. 在数据更新时,通过调整时间轴的范围来实现坐标轴的移动: ```cpp QDateTime newEndTime = QDateTime::currentDateTime(); // 获取新的结束时间 QDateTime newStartTime = newEndTime.addSecs(-60); // 新的起始时间为结束时间-60秒 timeAxis->setRange(newStartTime, newEndTime); // 调整时间轴的范围 ``` 通过以上步骤,可以实现QChart跟随时间移动坐标轴的效果。当数据不断更新时,只需要调整时间轴的范围,就可以实现坐标轴的移动,以显示最新的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值