文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 实时更新的双Y轴折线图
- 前言
- 一、头文件如下
- 二、CPP文件
前言
双Y轴折现并且运用定时器实时更新
搭配QT5 加上 VS2015
注意:.pro文件中一定要加入QT +=charts
头文件里也必须加上:
QT_CHARTS_USE_NAMESPACE
下面直接上代码,注释全在文中
提示:以下是本篇文章正文内容,下面案例可供参考
一、头文件如下#ifndef CHUASHECHART02_H
#define CHUASHECHART02_H
#include
#pragma execution_character_set(“utf-8”)
#include
#include
#include
#include
QT_CHARTS_USE_NAMESPACE
namespace Ui {
class CHuaSheChart02;
}
class CHuaSheChart02 : public QMainWindow
{
Q_OBJECT
public:
explicit CHuaSheChart02(QWidget *parent = 0);
~CHuaSheChart02();
QChart *chart; QLineSeries *series1; QLineSeries *series2; QTimer *timer; void drawLine(); void initChart();
public slots:
void timerDeal();
private:
Ui::CHuaSheChart02 *ui;
};
#endif // CHUASHECHART02_H
二、CPP文件#include “chuashechart02.h”
#include “ui_chuashechart02.h”
CHuaSheChart02::CHuaSheChart02(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::CHuaSheChart02)
{
ui->setupUi(this);
initChart();
timer = new QTimer(); connect(timer,SIGNAL(timeout()),this,SLOT(timerDeal())); //连接定时器信号 timer->start(100); // 时间开始并且间隔为100毫秒
}
void CHuaSheChart02::initChart()
{
//初始化QChart的实例
chart = new QChart();
//初始化两个QLineSeries的实例
series1 = new QLineSeries();
series2 = new QLineSeries();
//设置两条折线的名称
series1->setName("第一组");
series2->setName("第二组");
//把曲线添加到QChart的实例chart中
chart->addSeries(series1);
chart->addSeries(series2);
//声明并初始化X轴、两个Y轴
QDateTimeAxis *axisX = new QDateTimeAxis();
QValueAxis *axisY_1 = new QValueAxis();
QValueAxis *axisY_2 = new QValueAxis();
//设置坐标轴显示的范围
axisX->setMin(QDateTime::currentDateTime().addSecs(-10 * 1));
axisX->setMax(QDateTime::currentDateTime().addSecs(0));
axisY_1->setMin(0);
axisY_1->setMax(18);
axisY_2->setMin(0);
axisY_2->setMax(18);
//设置坐标轴上的格点
axisY_1->setTickCount(7);
axisY_2->setTickCount(11);
//设置坐标轴显示的名称
axisX->setTitleText("时间");
axisY_1->setTitleText("完成量");
axisY_2->setTitleText("交付量");
//设置坐标轴的颜色,粗细,设置网格不显示
axisY_1->setLinePenColor(QColor(Qt::darkBlue));
axisY_1->setGridLineColor(QColor(Qt::darkBlue));
axisY_2->setLinePenColor(QColor(Qt::darkGreen));
axisY_2->setGridLineColor(QColor(Qt::darkGreen));
axisY_1->setGridLineVisible(false);
axisY_2->setGridLineVisible(false);
QPen penY1(Qt::darkBlue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
QPen penY2(Qt::darkGreen, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
axisY_1->setLinePen(penY1);
axisY_2->setLinePen(penY2);
//把坐标轴添加到chart中,
//addAxis函数的第二个参数是设置坐标轴的位置,
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY_1, Qt::AlignLeft);
chart->addAxis(axisY_2, Qt::AlignRight);
//把曲线关联到坐标轴
series1->attachAxis(axisX);
series1->attachAxis(axisY_1);
series2->attachAxis(axisX);
series2->attachAxis(axisY_2);
ui->graphicsView->setChart(chart);
}
void CHuaSheChart02::drawLine()
{
//每增加一个点改变X轴的范围,实现曲线的动态更新效果
QDateTime atnowtime = QDateTime::currentDateTime();
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
chart->axisX()->setMin(QDateTime::currentDateTime().addSecs(-10 * 1));
chart->axisX()->setMax(QDateTime::currentDateTime().addSecs(0));
//当曲线上最早的点超出X轴的范围时,剔除最早的点,
// if(series1->count() > 139)
// {
// series1->removePoints(0,series1->count() - 139);
// }
// if(series2->count() > 139)
// {
// series2->removePoints(0,series2->count() - 139);
// }
int Y1 = qrand()%9; //随机生成0到9的随机数 int Y2 = qrand()%18;//随机生成9到18的随机数 //增加新的点到曲线末端 series1->append(atnowtime.toMSecsSinceEpoch(), Y1); series2->append(atnowtime.toMSecsSinceEpoch(), Y2);
}
void CHuaSheChart02::timerDeal()
{
drawLine();
}
CHuaSheChart02::~CHuaSheChart02()
{
delete ui;
}



