早就想发这个帖子了,但由于单位项目比较紧,一直没腾出时间去学习和发博客,今天趁着再次接触了一下QCustomPlot,把上次要 发的qchart和QCustomPlot做的一些初级练习发出来。
我的开发环境是QT5.10+MSVC2015,但 qchart和QCustomPlot应用和调用的资源与版本和编译器无大关系,所以基本都可以移植使用。
附上对我最有帮助的文章链接:https://blog.csdn.net/weixin_42837024/article/details/88669351
话不多说,,直接正文,首先是qchart的使用,qchart如果是静态使用,没什么毛病,很多功能很容易就能实现,比如横坐标是时间,特殊类型字符等,如果是动态刷新,目前我是仅仅能用replace方式实现一些数据的动态 刷新,无法实现滚动的时间或者滚动的数据,如果用append方式,总是会运行 一段时间后资源占用过大,到时系统特别卡,从而程序出现崩溃闪退。
附上我的qchart效果图:
实现代码:
#include "aboutchart.h"
#include "ui_aboutchart.h"
#include "mainwindow.h"
QLineSeries *series;
QLineSeries *series1;
QValueAxis *axisX;
QChart *chart;
int chardate[256];
int nowdate[256];
int lastdate[256];
QPieSlice *slice;
QPieSlice *slice1;
QPieSlice *slice2;
QPieSlice *slice3;
QDateTimeAxis *axisX_Time ;
QValueAxis *axisY_Data;//数据点
QLineSeries *dataSeries;
QLineSeries *dataSeries1;
AboutChart::AboutChart(QWidget *parent) :
QWidget(parent),
ui(new Ui::AboutChart)
{
ui->setupUi(this);
populateThemeBox();
//初始化表格配置
m_valueMax=255;
m_valueCount=1000;
chartView = new QChartView(createLineChart());
chartView->setRubberBand(QChartView::HorizontalRubberBand);//设置橡皮筋(放大缩小)可鼠标左键选中范围内放大,右键缩小
chartView->setRenderHint(QPainter::Antialiasing);//设置抗锯齿
ui->gridLayout->addWidget(chartView,1,1);
m_charts << chartView;
//设置初始表格颜色
QPalette pal = qApp->palette();
pal.setColor(QPalette::Window, QRgb(0xf0f0f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
qApp->setPalette(pal);
//创建定时器
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timeSlot()));//绑定定时函数
timer->start(100);
//绘制一个圆饼图
//![1]
QPieSeries *series = new QPieSeries();
series->setHoleSize(0.2);//设置饼图孔大小
series->setPieSize(0.5);//设置饼图大小
slice = series->append("完成15.6%", 15.6);
slice->setExploded();
slice->setLabelVisible();
slice->setLabelColor(QColor(255,45,46));
slice->setColor(QColor(43,223,20));
slice1 = series->append("其他23.8%", 23.8);
//slice1->setExploded();
slice1->setLabelVisible();
slice2 = series->append("未完成4.2%", 4.2);
//slice2->setExploded();
slice2->setLabelVisible();
slice3 = series->append("进行56.4%", 56.4);
//slice3->setExploded();
slice3->setLabelVisible();
//![1]
//![2]
QChartView *chartView = new QChartView();
chartView->setRenderHint(QPainter::Antialiasing);
chartView->chart()->setTitle("lemon glaze (100g)");
chartView->chart()->addSeries(series);
chartView->chart()->legend()->setAlignment(Qt::AlignRight);//设置各个名称显示位置
chartView->chart()->setTheme(QChart::ChartThemeBrownSand);
//chartView->chart()->setBackgroundVisible(false);//设置背景不可见
chartView->chart()->legend()->setFont(QFont("Arial", 7));
//![2]
//![3]
ui->gridLayout->addWidget(chartView,2,2);
//绘制时间曲线表
//![1]
axisX_Time = new QDateTimeAxis();//时间轴
//QDateTimeAxis需要QDateTime的数值格式
//axisX_Time->setFormat("mm:ss:zzz");//如果需要其他时间也可以进行修改
axisX_Time->setFormat("hh:mm:ss");//如果需要其他时间也可以进行修改
QDateTime temp_StartTime(QDate(2000, 1, 1), QTime(0, 10, 0)); //前面是年月日,后面是小时、分钟、秒
QDateTime temp_EndTime(QDate(2000, 1, 1), QTime(0, 12, 0));//
axisX_Time->setTickCount(5);//设置显示的时间个数
axisX_Time->setRange(temp_StartTime, temp_EndTime);//设置显示范围
//最后绑定数据即可
//曲线0
dataSeries = new QLineSeries();
dataSeries->setName("DataSeries0");
dataSeries->setColor(QColor(123,200,50));
QDateTime temp_AddTimePos(QDate(2000, 1, 1), QTime(0, 10, 0));//生成一个坐标轴时间QDateTime
for(int i=0;i<50;i++)
dataSeries->append(temp_AddTimePos.addSecs(i).toSecsSinceEpoch(), qrand()%100);
//曲线1
dataSeries1 = new QLineSeries();
dataSeries1->setName("DataSeries1");
dataSeries1->setColor(QColor(80,45,250));
QDateTime temp_AddTimePos1(QDate(2000, 1, 1), QTime(0, 10, 0));//生成一个坐标轴时间QDateTime
for(int i=0;i<50;i++)
dataSeries1->append(temp_AddTimePos1.addSecs(i).toSecsSinceEpoch(), qrand()%100);
QChart *chart = new QChart();
chart->setTitle("时间数据曲线图");
chart->setTheme(QChart::ChartThemeBlueCerulean);
chart->legend()->setAlignment(Qt::AlignTop);//把曲线的名称放到表格上面
chart->addSeries(dataSeries);//chart添加曲线
chart->addSeries(dataSeries1);//chart添加曲线
chart->createDefaultAxes();//创建图表坐标轴
//chart->axisX()->setRange(0, temp_EndTime.addSecs(100));//设置x轴坐标范围
//chart->axisY()->setRange(0, 100);//这里设置y轴坐标范围 只有正值
//!axisX_Time和dataSeries未能成功关联,关联无数据显示。只能分开才能显示数据,但分开仍存在问题,时间更换超初始化append范围就失效不会显示了
//chart->setAxisX(axisX_Time, dataSeries);//axisX_Time axisX_Data
chart->setAxisX(axisX_Time);
axisY_Data= new QValueAxis();//数据点
axisY_Data->setTickCount(8);
axisY_Data->setRange(0, 100);//这里设置y轴坐标范围 只有正值
chart->setAxisY(axisY_Data);
//![2]
QChartView *chartView1 = new QChartView(chart);
//chartView1->setRubberBand(QChartView::HorizontalRubberBand);//设置橡皮筋(放大缩小)可鼠标左键选中范围内放大,右键缩小
//chartView1->setRenderHint(QPainter::Antialiasing);//设置抗锯齿
ui->gridLayout->addWidget(chartView1,1,2);
}
AboutChart::~AboutChart()
{
delete ui;
}
//初始化chart配置
QChart *AboutChart::createLineChart() const
{
series = new QLineSeries();
series->setName("DataSeries");
for(int i=0;i<256;i++){//初始化图形数值
nowdate[i]=100;
series->append(i,nowdate[i]);
lastdate[i]=nowdate[i];//记录初始化的y值
}
chart = new QChart();
chart->setTitle("数据曲线图");
chart->legend()->setAlignment(Qt::AlignTop);//把曲线的名称放到表格上面
//chart->legend()->hide();//隐藏曲线名称
chart->addSeries(series);//chart添加曲线
chart->createDefaultAxes();//创建图表坐标轴
chart->axisX()->setRange(0, m_valueMax);//设置x轴坐标范围
//chart->axisY()->setRange(-m_valueCount/2-1, m_valueCount/2+1); //设置y轴坐标有正负,但数据未说明有负值
chart->axisY()->setRange(0, m_valueCount);//这里设置y轴坐标范围 只有正值
axisX=new QValueAxis;
axisX->setTickCount(6);//设置背景表格有6列
chart->setAxisX(axisX,series);
return chart;
}
void AboutChart::timeSlot()
{
//动态突出圆饼
slice->setExploded(qrand()%2);
slice->setLabelVisible(qrand()%2);
slice1->setExploded(qrand()%2);
slice1->setLabelVisible(qrand()%2);
slice2->setExploded(qrand()%2);
slice2->setLabelVisible(qrand()%2);
slice3->setExploded(qrand()%2);
slice3->setLabelVisible(qrand()%2);
slice->setColor(QColor(qrand()%255,qrand()%255,qrand()%255));
slice1->setColor(QColor(qrand()%255,qrand()%255,qrand()%255));
slice2->setColor(QColor(qrand()%255,qrand()%255,qrand()%255));
slice3->setColor(QColor(qrand()%255,qrand()%255,qrand()%255));
slice->setValue(qrand()%100);
slice1->setValue(qrand()%100);
slice2->setValue(qrand()%100);
slice3->setValue(qrand()%100);
slice->setLabel(tr("完成%1%").arg(qrand()%100));
slice1->setLabel(tr("其他%1%").arg(qrand()%100));
slice2->setLabel(tr("未完成%1%").arg(qrand()%100));
slice3->setLabel(tr("进行%1%").arg(qrand()%100));
//动态刷新时间表
//实时时间刷新数据或显示历史时刻数据
if(ui->checkBox->isChecked()){
//!未成功,显示范围只能是初始化append那些范围内,实时时间就超范围不好使了
axisX_Time->setFormat("hh:mm:ss");
QDateTime qtimeObj = QDateTime::currentDateTime();//获取时间
axisX_Time->setRange(qtimeObj.addSecs(-50),qtimeObj.addSecs(50) );//设置显示范围
for(int i=0;i<100;i++){
qDebug()<<"now time is "<append(qtimeObj.toSecsSinceEpoch(), qrand()%100);
//dataSeries->replace(qtimeObj.toSecsSinceEpoch(), 0,qtimeObj.toSecsSinceEpoch(), 1);
}
}
else{
//!未成功,显示范围只能是初始化append那些范围内,更换一个其他的时间段就不好使了
//axisX_Time->setFormat("mm:ss:zzz");
QDateTime temp_AddTimePos(QDate(2000, 1, 1), QTime(0, 10, 0));//生成一个坐标轴时间QDateTime
axisX_Time->setRange(temp_AddTimePos, temp_AddTimePos.addSecs(100));//设置显示范围
//qDebug()<<"rage time is "<clear();
//!这样刷新会显示4/5的长度数据,并不会显示4/10,因为坐标轴和数据未关联,数据实际长度是50秒,这里刷新的数据是40秒,坐标轴范围是100秒。
for(int i=0;i<40;i++){
//QDateTime temp_AddTimePos(QDate(2000, 1, 1), QTime(0, 9, 50+i));//生成一个坐标轴时间QDateTime
//dataSeries->append(temp_AddTimePos.toMSecsSinceEpoch()+i-50, qrand()%50);
dataSeries->append(temp_AddTimePos.addSecs(i).toSecsSinceEpoch(), qrand()%100);
//dataSeries->append(i, 100);
//qDebug()<<"history time is "<clear();
//!这样刷新会显示2/5的长度数据,并不会显示2/10,因为坐标轴和数据未关联,数据实际长度是50秒,这里刷新的数据是20秒,坐标轴范围是100秒。
for(int i=0;i<20;i++){
dataSeries1->append(temp_AddTimePos.addSecs(i).toSecsSinceEpoch(), qrand()%100);
}
}
//QDateTime qtimeObj = QDateTime::currentDateTime();//获取时间
//ids=qtimeObj.toString("hh:mm");
//aaa=tr("%1").arg(ids);
//qDebug()<<"num is "<append(num, chardate[num]);
//series->replace(0,num,chardate[num]);
qreal x = chart->plotArea().width()/axisX->tickCount();
num++;
if(num>=200){
chart->scroll(x/200, 0);
//series->remove(num-100,(qrand()%1000)*0.15);
// num=0;
series->remove(num-100, chardate[num-100]);
//chardate[num-100]=0;
}*/
//单包方式
for(int i=0;i<256;i++){//随机赋值chardate
chardate[i]=qrand()*444%800;
}
for(int i=0;i<256;i++){
nowdate[i]=chardate[i];
}
for(int i=0;i<256;i++){
series->replace(i,lastdate[i],i,nowdate[i]);//采用replace方式,比append串行方式节省内存,不会造成长时间运行电脑严重卡顿或者程序崩溃问题
lastdate[i]=nowdate[i];
}
}
//下拉模式选择
void AboutChart::populateThemeBox()
{
// add items to theme combobox
ui->comboBox->addItem("Light", QChart::ChartThemeLight);
ui->comboBox->addItem("Blue Cerulean", QChart::ChartThemeBlueCerulean);
ui->comboBox->addItem("Dark", QChart::ChartThemeDark);
ui->comboBox->addItem("Brown Sand", QChart::ChartThemeBrownSand);
ui->comboBox->addItem("Blue NCS", QChart::ChartThemeBlueNcs);
ui->comboBox->addItem("High Contrast", QChart::ChartThemeHighContrast);
ui->comboBox->addItem("Blue Icy", QChart::ChartThemeBlueIcy);
ui->comboBox->addItem("Qt", QChart::ChartThemeQt);
}
void AboutChart::updateUI()
{
qDebug()<<"change theme!";
//设置主题颜色
QChart::ChartTheme theme = static_cast(
ui->comboBox->itemData(ui->comboBox->currentIndex()).toInt());
const auto charts = m_charts;
if (!m_charts.isEmpty() && m_charts.at(0)->chart()->theme() != theme)
{
for (QChartView *chartView : charts) {
chartView->chart()->setTheme(theme);
}
// Set palette colors based on selected theme
//![8]
QPalette pal = window()->palette();
if (theme == QChart::ChartThemeLight) {
pal.setColor(QPalette::Window, QRgb(0xf0f0f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
//![8]
} else if (theme == QChart::ChartThemeDark) {
pal.setColor(QPalette::Window, QRgb(0x121218));
pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));
} else if (theme == QChart::ChartThemeBlueCerulean) {
pal.setColor(QPalette::Window, QRgb(0x40434a));
pal.setColor(QPalette::WindowText, QRgb(0xd6d6d6));
} else if (theme == QChart::ChartThemeBrownSand) {
pal.setColor(QPalette::Window, QRgb(0x9e8965));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
} else if (theme == QChart::ChartThemeBlueNcs) {
pal.setColor(QPalette::Window, QRgb(0x018bba));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
} else if (theme == QChart::ChartThemeHighContrast) {
pal.setColor(QPalette::Window, QRgb(0xffab03));
pal.setColor(QPalette::WindowText, QRgb(0x181818));
} else if (theme == QChart::ChartThemeBlueIcy) {
pal.setColor(QPalette::Window, QRgb(0xcee7f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
} else {
pal.setColor(QPalette::Window, QRgb(0xf0f0f0));
pal.setColor(QPalette::WindowText, QRgb(0x404044));
}
window()->setPalette(pal);
}
}
#ifndef ABOUTCHART_H
#define ABOUTCHART_H
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*
QT_BEGIN_NAMESPACE
class QComboBox;
class QCheckBox;
class Ui_ThemeWidgetForm;
QT_END_NAMESPACE
*/
QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE
typedef QPair Data;
typedef QList DataList;
typedef QList
这里关于qchart资源配置的地方,就不介绍了,可直接参考qt自带例程qchart部分。
接下来介绍一些QCustomPlot的初级应用,相比之下,QCustomPlot实现的功能更强大,效果更好一些,代码部分操作也很简便,比qchart好。刚用QCustomPlot,我就很容易的实现了动态时间数据刷新等一些qchart不容易 实现的功能,还有一个很重要的功能是鼠标能实时显示曲线的数据,而不是坐标轴的数据,这个还在研究中,弄好了在单独发一个博客,下面放上我练习实现的QCustomPlot效果:
贴代码:
#include "aboutqcustomplot.h"
#include "ui_aboutqcustomplot.h"
#include "mainwindow.h"
aboutqcustomplot::aboutqcustomplot(QWidget *parent) :
QWidget(parent),
ui(new Ui::aboutqcustomplot)
{
ui->setupUi(this);
SimpleDemo(ui->widget);
SimpleDemo1(ui->widget_2);
SimpleDemo2(ui->widget_3);
SimpleDemo3(ui->widget_4);
//创建定时器
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timeSlot()));//绑定定时函数
timer->start(1000);
ui->checkBox->setChecked(true);
ui->checkBox_2->setChecked(true);
}
aboutqcustomplot::~aboutqcustomplot()
{
delete ui;
}
void aboutqcustomplot::SimpleDemo(QCustomPlot *CustomPlot)
{
QDateTime qtimeObj = QDateTime::currentDateTime();//获取时间
//for(int i=0;i<=6;i++)
// time<xAxis->setRange(time.at(0),time.at(time.size()-1));
}
else
{
//容器数据现在是正好100个 把第一个出栈 把第101个入栈 正好还是100个数据
y.removeFirst();
time.removeFirst();
//入栈
time.append(qtimeObj.toTime_t());
y.append(qrand()%50);//新值随机数
//设置范围正好 能显示当前点
CustomPlot->xAxis->setRange(time.at(0),time.at(time.size()-1));
}
if(time.count()==1){
//增加一条线
CustomPlot->addGraph();
//设置Y轴范围
CustomPlot->yAxis->setRange(0,100);//设置y轴范围
}
qDebug()<<"num is"< timer(new QCPAxisTickerDateTime);
//timer->setDateTimeFormat("yyyy-MM-dd"); //设置时间格式
timer->setDateTimeFormat("hh-mm-ss"); //设置时间格式
timer->setTickCount(7); //设置时间轴 一共几格
CustomPlot->xAxis->setTickLabelRotation(30);//设置label 旋转30° 横着显示可能显示不全
timer->setTickStepStrategy(QCPAxisTicker::tssMeetTickCount);//允许执行可读性较差的滴答步骤,从而有助于更接近所请求的滴答计数
//设置坐标轴
CustomPlot->xAxis->setTicker(timer);
//CustomPlot->xAxis->setRange(time.at(0),time.at(6));
CustomPlot->graph(0)->setData(time,y);
//可以进行鼠标位置 放大缩小 拖拽 放大缩小坐标系!!!功能非常强大
CustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
//重绘 每次改变完以后都要调用这个进行重新绘制
CustomPlot->replot();
}
void aboutqcustomplot::SimpleDemo1(QCustomPlot *CustomPlot)
{
QVector x(101),y(101);
for(int i=0;i<101;i++)
{
x[i] = i/5.0-10;
y[i] = x[i]*x[i]*x[i];
}
CustomPlot->addGraph();
CustomPlot->graph(0)->setPen(QPen(Qt::green));
CustomPlot->graph(0)->setData(x,y);
QVector temp(100),temp1(100);
for(int i=0;i<100;i++)
{
temp[i] = i;
temp1[i] = 100*i;
}
CustomPlot->addGraph();
CustomPlot->graph(1)->setPen(QPen(Qt::red));
CustomPlot->graph(1)->setData(temp,temp1);
CustomPlot->xAxis->setLabel("x");
CustomPlot->yAxis->setLabel("y=x³");
CustomPlot->xAxis->setRange(0,11);
CustomPlot->yAxis->setRange(0,1100);
//可以进行鼠标位置 放大缩小 拖拽 放大缩小坐标系!!!功能非常强大
CustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
//重绘 每次改变完以后都要调用这个进行重新绘制
CustomPlot->replot();
}
void aboutqcustomplot::SimpleDemo2(QCustomPlot *CustomPlot)
{
QVector time;
QVector y;
//模拟几个时间 .toTime_t()是转换为 时间戳 从1970年到现在的秒数
QDateTime temp_AddTimePos(QDate(2019, 1, 1), QTime(23, 10, 0));//生成一个坐标轴时间QDateTime
for(int i=0;i<10;i++)
time<addGraph();
//设置Y轴范围
CustomPlot->yAxis->setRange(0,100);//设置y轴范围
//QCPAxisTickerDateTime 时间坐标轴 必须要用 智能指针
QSharedPointer timer(new QCPAxisTickerDateTime);
//timer->setDateTimeFormat("yyyy-MM-dd"); //设置时间格式
timer->setDateTimeFormat("hh-mm-ss"); //设置时间格式
timer->setTickCount(10); //设置时间轴 一共几格
CustomPlot->xAxis->setTickLabelRotation(30);//设置label 旋转30° 横着显示可能显示不全
timer->setTickStepStrategy(QCPAxisTicker::tssMeetTickCount);//允许执行可读性较差的滴答步骤,从而有助于更接近所请求的滴答计数
//设置坐标轴
CustomPlot->xAxis->setTicker(timer);
CustomPlot->xAxis->setRange(time.at(0),time.at(9));
CustomPlot->graph(0)->setData(time,y);
//可以进行鼠标位置 放大缩小 拖拽 放大缩小坐标系!!!功能非常强大
CustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
//重绘 每次改变完以后都要调用这个进行重新绘制
CustomPlot->replot();
}
void aboutqcustomplot::SimpleDemo3(QCustomPlot *CustomPlot)
{
//static QVector sx_vec,xAxis_vec; //存放数据的容器 在h文件中声明,这里声明再次进入界面崩溃,不知道为什么
//m_chartPoint_counter 计数器 一直增加 来一条数据增加一下 控制x轴前进 实现动态效果
//这时容器里面还没100个点 所有一直向里面存
if(m_chartPoint_counter<100)
{
sx_vec.append(qrand()%50);//新值随机数
xAxis_vec.append(m_chartPoint_counter);
//设置范围正好 能显示当前点
CustomPlot->xAxis->setRange(0,xAxis_vec.at(xAxis_vec.size()-1));
}
else
{
//容器数据现在是正好100个 把第一个出栈 把第101个入栈 正好还是100个数据
sx_vec.removeFirst();
xAxis_vec.removeFirst();
//入栈
xAxis_vec.append(m_chartPoint_counter);
sx_vec.append(qrand()%50);//新值随机数
//设置范围正好 能显示当前点
CustomPlot->xAxis->setRange(xAxis_vec.at(0),xAxis_vec.at(xAxis_vec.size()-1));
}
//qDebug()<<"num is"<addGraph();
CustomPlot->graph(0)->setPen(QPen(Qt::gray));
CustomPlot->xAxis->setLabel("time");
CustomPlot->yAxis->setLabel("y=qrand%50");
}
CustomPlot->yAxis->rescale(true);//设置Y轴坐标系 自动缩放以正常显示所有的数据
//CustomPlot->yAxis->setRange(0,100);//设置y轴范围
CustomPlot->graph(0)->setData(xAxis_vec,sx_vec);//设置数据
//可以进行鼠标位置 放大缩小 拖拽 放大缩小坐标系!!!功能非常强大
CustomPlot->setInteractions(QCP::iRangeDrag | QCP::iRangeZoom);
CustomPlot->replot();//重绘制
//这里必须要一直增加 如果增加到10就不增加 效果就是第10个点一直变化 不会出现动态效果
m_chartPoint_counter++;
}
void aboutqcustomplot::timeSlot()
{
if(ui->checkBox_2->isChecked())
SimpleDemo3(ui->widget_4);
if(ui->checkBox->isChecked())
SimpleDemo(ui->widget);
}
#ifndef ABOUTQCUSTOMPLOT_H
#define ABOUTQCUSTOMPLOT_H
#include
#include
#include "QCustomPlot/qcustomplot.h"
namespace Ui {
class aboutqcustomplot;
}
class aboutqcustomplot : public QWidget
{
Q_OBJECT
public:
explicit aboutqcustomplot(QWidget *parent = 0);
~aboutqcustomplot();
private slots:
void SimpleDemo(QCustomPlot *customPlot);
void SimpleDemo1(QCustomPlot *customPlot);
void SimpleDemo2(QCustomPlot *customPlot);
void SimpleDemo3(QCustomPlot *customPlot);
void timeSlot();
private:
Ui::aboutqcustomplot *ui;
QTimer *timer;
QVector time;
QVector y;
QVector sx_vec,xAxis_vec; //存放数据的容器
int m_chartPoint_counter=0;
};
#endif // ABOUTQCUSTOMPLOT_H
好了,该说的能说的我都放上面了,代码也贴全了,完全不想自我保留,没意思,分享给大家,希望能帮助到需要的人。最后附上我的工程链接:https://download.csdn.net/download/qq_37603131/11305578