Qt-Char实现动态波形显示

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

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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于使用CMake构建Qt6项目,可以按照以下步骤进行操作: 1. 安装CMake 如果您还没有安装CMake,可以从CMake官网下载CMake并进行安装。或者,您也可以使用包管理器安装CMake。 2. 创建CMakeLists.txt文件 在项目根目录下创建一个名为CMakeLists.txt的文件,并添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(MyProject) set(CMAKE_CXX_STANDARD 11) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) find_package(Qt6 COMPONENTS Widgets REQUIRED) add_executable(MyExecutable main.cpp) target_link_libraries(MyExecutable PRIVATE Qt6::Widgets) ``` 这里的MyProject和MyExecutable可以替换为您自己的项目和可执行文件名。 3. 构建项目 在终端中进入项目根目录,并执行以下命令: ``` mkdir build cd build cmake .. make ``` 这将会在build目录下生成可执行文件。 对于绘制动态波形图,可以使用Qt Charts模块中的QChart和QLineSeries类。以下是一个简单的示例: ``` #include <QtCharts> int main(int argc, char *argv[]) { QApplication a(argc, argv); QChartView chartView; QChart chart; chart.setTitle("Dynamic Waveform Chart"); QLineSeries series; chart.addSeries(&series); chart.createDefaultAxes(); chartView.setChart(&chart); chartView.setRenderHint(QPainter::Antialiasing); chartView.show(); // Add data to the series to create a dynamic waveform QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&series]() { static qreal x = 0; static qreal y = 0; x += 0.1; y = qSin(x); series.append(x, y); }); timer.start(50); return a.exec(); } ``` 这里使用QTimer定期向QLineSeries添加数据,从而实现动态波形图的绘制。您可以根据需要修改定时器的时间间隔和数据生成方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值