当前位置:网站首页>Qt-Char实现动态波形显示

Qt-Char实现动态波形显示

2022-06-09 10:05:00 温逗死

通过定时器中断,实现简单的曲线动态显示

charttest.h

#ifndef CHARTTEST_H
#define CHARTTEST_H




#include <QtWidgets/QWidget>
#include "ui_charttest.h"
#include <QHBoxLayout>

#include "myChart.h"


#define PI 3.14159

using namespace std;

class chartTest : public QWidget
{
    
	Q_OBJECT

public:
	chartTest(QWidget *parent = 0);
	~chartTest();
	int MaxSample = 100;
	QValueAxis* vaX, *vaY1;
	QSplineSeries* spY1;

private slots:
	void timer1Slot();


private:
	Ui::chartTestClass ui;
	myChart* mChart;
	QVector<QPointF> vecKv;
	void iniChart();
};

#endif // CHARTTEST_H

charttest.cpp

#include "charttest.h"

chartTest::chartTest(QWidget *parent)
	: QWidget(parent)
{
    
	ui.setupUi(this);
	mChart = new myChart();
	mChart->setFixedSize(800, 800);
	iniChart();
	QTimer* timer1 = new QTimer(this);
	timer1->setInterval(10);
	connect(timer1, SIGNAL(timeout()), this, SLOT(timer1Slot()));
	timer1->start();
}

chartTest::~chartTest()
{
    

}
void chartTest::iniChart()
{
    


	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();
	spY1 = new QSplineSeries();

	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");

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


	
	spY1->attachAxis(vaX);
	spY1->attachAxis(vaY1);
	spY1->setColor(QColor(255, 0, 0));
	spY1->setUseOpenGL();


	QHBoxLayout* hlay = new QHBoxLayout();
	hlay->addWidget(mChart);
	this->setLayout(hlay);
}
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));
	}
	else
	{
    
		for (int i = 1; i < MaxSample; ++i)
		{
    
			vecKv[i - 1] = QPointF(vecKv[i - 1].x(), vecKv[i].y());
		}
		float tmp = 85.0 + 85 * sin(cnt * 4 * PI / MaxSample);
		vecKv[MaxSample-1] = QPointF(vecKv[MaxSample-1].x(), tmp);

		if (cnt >= 10 * MaxSample)
		{
    
			cnt = 0;
			vecKv.clear();
		}
	}
	cnt++;

	spY1->replace(vecKv);
}
原网站

版权声明
本文为[温逗死]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_43142509/article/details/125111786