Qt通过QChart实时显示曲线,显示两个纵坐标轴并刷新

44 篇文章 10 订阅

头文件包含

本样例下载地址:https://download.csdn.net/download/birenxiaofeigg/11244404

#include <QChartView>
#include <QtCharts/QChartView>
#include <QtCharts/QValueAxis>
#include <QtCharts/QSplineSeries>

#include <QVector>
#include <QTimer>
#include <QHBoxLayout>

新建QChartView类并作初始化

void chartTest::iniChart()
{
	mChart = new QChartView();
	mChart->setEnabled(true);
	mChart->chart()->setTitle("Kv-Vacuum");
	mChart->chart()->legend()->hide();
	mChart->chart()->setTheme(QtCharts::QChart::ChartTheme::ChartThemeDark);

	vaX = new QValueAxis();
	vaY1 = new QValueAxis();
	vaY2 = new QValueAxis();

	spY1 = new QSplineSeries();
	spY2 = new QSplineSeries();

	//vecKv = new QVector<QPointF>;
	//vecVacc = new QVector<QPointF>;

	vaX->setRange(0, MaxSample);
	vaX->setTickCount(7);
	vaX->setLabelsColor(QColor(0, 255, 0));
	vaX->setTitleText("Sample-Points");

	vaY1->setRange(0, 200);
	vaY1->setTickCount(6);
	vaY1->setLabelsColor(QColor(255,0, 0));
	vaY1->setTitleText("Voltage-Kv");

	vaY2->setRange(0, 10);
	vaY2->setTickCount(6);
	vaY2->setLabelsColor(QColor(0, 0, 255));
	vaY2->setTitleText("Penning-V");

	mChart->chart()->addAxis(vaX, Qt::AlignBottom);
	mChart->chart()->addAxis(vaY1, Qt::AlignLeft);
	mChart->chart()->addAxis(vaY2, Qt::AlignRight);
	mChart->chart()->addSeries(spY1);
	mChart->chart()->addSeries(spY2);

	
	spY1->attachAxis(vaX);
	spY1->attachAxis(vaY1);
	spY1->setColor(QColor(255, 0, 0));
	spY1->setUseOpenGL();// 开启openGL加速

	spY2->attachAxis(vaX);
	spY2->attachAxis(vaY2);
	spY2->setColor(QColor(0, 0, 255));
	spY2->setUseOpenGL();

	QHBoxLayout* hlay = new QHBoxLayout();
	hlay->addWidget(mChart);
	this->setLayout(hlay);

	QTimer* timer1 = new QTimer(this);
	timer1->setInterval(15);
	connect(timer1, SIGNAL(timeout()), this, SLOT(timer1Slot()));
	timer1->start();
}

定时器处理,数据刷新

void chartTest::timer1Slot()
{
	static int cnt = 0;
	if (cnt <= MaxSample)
	{
		float tmp = 85.0 + 85 * sin(cnt * 4 * PI / MaxSample);
		vecKv.push_back(QPointF(cnt, tmp));
		tmp = 5 + 5 * cos(cnt * 4 * PI / MaxSample);
		vecVacc.push_back(QPointF(cnt, tmp));
	}
	else
	{
		for (int i = 1; i < MaxSample; ++i)
		{
			vecKv[i - 1] = QPointF(vecKv[i - 1].x(), vecKv[i].y());
			vecVacc[i - 1] = QPointF(vecVacc[i - 1].x(), vecVacc[i].y());
		}
		float tmp = 85.0 + 85 * sin(cnt * 4 * PI / MaxSample);
		vecKv[MaxSample-1] = QPointF(vecKv[MaxSample-1].x(), tmp);
		tmp = 5 + 5 * cos(cnt * 4 * PI / MaxSample);
		vecVacc[MaxSample-1] = QPointF(vecVacc[MaxSample-1].x(), tmp);

		if (cnt >= 3 * MaxSample)// 计数器复位
		{
			cnt = 0;
			vecKv.clear();
			vecVacc.clear();
		}
	}
	cnt++;

	spY1->replace(vecKv);
	spY2->replace(vecVacc);
}

图像显示

从0开始刷新

在这里插入图片描述

覆盖旧数据刷新

在这里插入图片描述
本样例下载地址:https://download.csdn.net/download/birenxiaofeigg/11244404

  • 3
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
Qt C++中使用QChart实时绘制曲线需要以下步骤: 1. 导入QChart和QLineSeries库:首先需要在项目文件中导入QChart和QLineSeries库。 2. 创建QChart对象:使用QChart类创建一个图表对象。 3. 创建QLineSeries对象:使用QLineSeries类创建一个线系列对象来存储曲线的数据。 4. 创建QChartView对象:使用QChartView类创建一个图表视图对象来显示图表。 5. 添加曲线数据:使用QLineSeries对象的append()函数向线系列中添加曲线的数据。 6. 实时更新曲线:在每次有新的数据需要显示时,使用QLineSeries对象的replace()函数更新曲线数据。 7. 刷新图表视图:使用QChartView对象的chart()函数获取图表对象,并使用repaint()函数刷新图表视图。 8. 设置定时器:使用QTimer类设置一个定时器,控制曲线数据的更新速度。 下面是一个简单的示例代码: ``` #include <QtCharts/QChart> #include <QtCharts/QLineSeries> #include <QtCharts/QChartView> #include <QtCore/QTimer> #include <QtWidgets/QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建图表对象 QtCharts::QChart chart; // 创建线系列对象 QtCharts::QLineSeries series; // 创建图表视图对象 QtCharts::QChartView chartView(&chart); // 添加曲线数据 series.append(0, 0); series.append(1, 1); series.append(2, 2); series.append(3, 3); // 将线系列添加到图表中 chart.addSeries(&series); // 设置坐标轴范围 chart.createDefaultAxes(); // 设置定时器 QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&series]() { // 更新曲线数据 series.replace(3, 4, qrand() % 5); series.remove(0); // 刷新图表视图 chartView.repaint(); }); timer.start(1000); // 每1秒更新曲线数据 // 显示图表视图 chartView.show(); return a.exec(); } ``` 这样,每1秒钟,程序会自动更新曲线的数据并绘制在图表中,实现了实时绘制曲线的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值