300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > qlineseries绘制动态曲线_Qt绘制动态曲线

qlineseries绘制动态曲线_Qt绘制动态曲线

时间:2023-01-08 01:41:55

相关推荐

qlineseries绘制动态曲线_Qt绘制动态曲线

首先*.pro文件中加一句

QT += charts

然后

mainwindow.cpp文件如下:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "QtCharts/QChart"

#include "QLineSeries"

#include "QValueAxis"

#include "QTimer"

#include "QTime"

#include "QList"

#include "qmath.h"

#include "QPointF"

#include "QDebug"

//#include

#include "QChartView"

QT_CHARTS_USE_NAMESPACE

QChart *m_chart;

QLineSeries *m_series;

//QList dataList;//存储业务数据

int maxSize = 5000;

int tem=0,flag=0;

//QTimer updateTimer;

int timeId;

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),//默认初始化?

ui(new Ui::MainWindow)

{

ui->setupUi(this);

m_chart = new QChart;//图表类

QChartView *chartView = new QChartView(m_chart);//图表视窗类

// v.setRubberBand(QChartView::HorizontalRubberBand);

chartView->setRubberBand(QChartView::RectangleRubberBand);//在图表窗口设置矩形橡皮筋

// chartView->setRubberBand();

m_series = new QLineSeries;//线 连续类

m_chart->addSeries(m_series);//在图表类添加连续线

for(int i=0;i

m_series->append(i,0);//在线连续类附加坐标x&y

}

m_series->setUseOpenGL(true);//openGl 加速

qDebug()<useOpenGL();

QValueAxis *axisX = new QValueAxis;//数值轴类

axisX->setRange(0,maxSize);//设置X坐标的范围

axisX->setLabelFormat("%g");//设置标签格式

axisX->setTitleText("axisX");//设置X坐标的标题名称

QValueAxis *axisY = new QValueAxis;

axisY->setRange(0,2000);//设置Y坐标的范围 可以设置负数

axisY->setTitleText("axisY");//设置Y坐标的标题名称

m_chart->setAxisX(axisX,m_series);//将轴添加在图表中

m_chart->setAxisY(axisY,m_series);//

m_chart->legend()->hide();//图列隐藏 有一个蓝色的小点被隐藏了。

m_chart->setTitle("demo");//设置曲线表的名称

QVBoxLayout *layout = ui->verticalLayout;//垂直布局 方框类

layout->addWidget(chartView);//在方框内添加图表视窗

timeId = startTimer(0);//感觉像是刷新频率的延时。 定义了timeId整型变量作为刷新的定时器变量。

}

double MainWindow::getData(double time){

double s = qCos( time * M_PI * 2 ) ;

return s;

}

void MainWindow::timerEvent(QTimerEvent *event){//定时器事件

if(event->timerId()==timeId){//定时器到时间,//模拟数据填充

static QTime dataTime(QTime::currentTime());//现在的时间

long int eltime = dataTime.elapsed();//消逝的时间

static int lastpointtime = 0;//最后一点时间

int size = (eltime - lastpointtime);//数据个数

qDebug()<"<

if(isVisible()){//判断一个控件是否可见

//矢量类 < 打印函数类 >

QVector oldPoints = m_series->pointsVector();//线连续类 点向量//Returns the points in the series as a vector

QVector points;//点

for(int i=size;i

points.append(QPointF(i-size ,oldPoints.at(i).y()));//替换数据用

}

if(tem < 1000 && flag == 0)

{

tem+=10;

if(tem>=999)

flag=1;

}

if(tem >0 && flag==1)

{

tem-=10;

if(tem<=0)

flag=0;

}

qint64 sizePoints = points.count();

for(int k=0;k

//points.append(QPointF(k+sizePoints,1.2*getData((((double)lastpointtime+k+1)/1000))));

points.append(QPointF(k+sizePoints,tem));

}

m_series->replace(points);//替换以前的点

lastpointtime = eltime;//消逝的时间复制给最后一点的时间。

}

}

}

MainWindow::~MainWindow()

{

delete ui;

}

然后mainwindow.h如下:

#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

protected:

void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;

private:

Ui::MainWindow *ui;

double getData(double time);

};

#endif // MAINWINDOW_H

在此作者的基础上做了一些备注与修改:

/HiccupHiccup/article/details/74996618

&lbrack;转载&rsqb; MFC绘制动态曲线,用双缓冲绘图技术防闪烁

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。