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 <QtCharts/QChartGlobal>
#include "QChartView"
QT_CHARTS_USE_NAMESPACE
QChart *m_chart;
QLineSeries *m_series;
//QList<double> 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<maxSize;++i){
m_series->append(i,0);//在线连续类附加坐标x&y
}
m_series->setUseOpenGL(true);//openGl 加速
qDebug()<<m_series->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()<<"size-->"<<size;
if(isVisible()){//判断一个控件是否可见
//矢量类 < 打印函数类 >
QVector<QPointF> oldPoints = m_series->pointsVector();//线连续类 点向量//Returns the points in the series as a vector
QVector<QPointF> points;//点
for(int i=size;i<oldPoints.count();++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<size;++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 <QMainWindow>
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
在此作者的基础上做了一些备注与修改:
https://blog.csdn.net/HiccupHiccup/article/details/74996618
Qt绘制动态曲线的更多相关文章
- [转载] MFC绘制动态曲线,用双缓冲绘图技术防闪烁
转载的原文地址 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新. 一.如何绘制动态曲线 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静态曲线,那 ...
- 【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁
摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁 2011 ...
- Matlab | 绘制动态曲线(使用 animatedline 对象)
效果如下: 示例代码: figure('Color','w'); h1 = animatedline; h1.Color = 'r'; h1.LineWidth = 1.0; h1.LineStyle ...
- pyqt中使用matplotlib绘制动态曲线
一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...
- pyqt中使用matplotlib绘制动态曲线 – pythonic
一.项目背景: 看了matplotlib for python developers这本书,基本掌握了在pyqt中显示曲线的做法,于是自己写一个. 二.需求描述: 1)X轴显示时间点,显示长度为1分钟 ...
- C++第四十四篇 -- MFC使用ChartCtrl绘制动态曲线
前言 目的:使用控制台程序带MFC类库画一个动态曲线图 参考链接: https://blog.csdn.net/sinat_29890433/article/details/105360032 htt ...
- 4. 绘制光谱曲线QGraphicsView类
一.前言 Qt的QGraphicsView类具有强大的视图功能,与其一起使用的还有QGraphicsScene类和QGraphicsItem类.大体思路就是通过构建场景类,然后向场景对象中增加各种图元 ...
- C# 曲线控件 曲线绘制 实时曲线 多曲线控件 开发
Prepare 本文将使用一个NuGet公开的组件来实现曲线的显示,包含了多种显示的模式和配置来满足各种不同的应用场景,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器 ...
- 用drawRect以及CAReplicatorLayer绘制动态水波纹
用drawRect以及CAReplicatorLayer绘制动态水波纹 大大简化了写水波纹效果的难度,你可以根据示例自己组装水波纹效果,本设计是几个工具组合在一起完成的效果, DrawRectObje ...
随机推荐
- PID控制算法
PID控制算法 四轴如何起飞的原理 四轴飞行器的螺旋桨与空气发生相对运动,产生了向上的升力,当升力大于四轴的重力时四轴就可以起飞了. 四轴飞行器飞行过程中如何保持水平: 我们先假设一种理想状况:四个电 ...
- QQ群文件下载速度慢-解决办法
QQ群文件下载速度慢-解决办法 本方法是本人亲测测试出来的,特此和大家分享 没有效果让你打我 解决方法 1.打开[手机版 QQ] 2.进入群文件,找到需要下载文件 3.[分享],先点击[发给好友],选 ...
- 轻松应对IDC机房带宽突然暴涨问题
轻松应对IDC机房带宽突然暴涨问题! 1[提出问题] [实际案例一] 凌晨3:00点某公司(网站业务)的一个IDC机房带宽流量突然从平时高峰期150M猛增至1000M,如下图: 该故障的影响:直接导致 ...
- 机器学习之LinearRegression与Logistic Regression逻辑斯蒂回归(三)
一 评价尺度 sklearn包含四种评价尺度 1 均方差(mean-squared-error) 2 平均绝对值误差(mean_absolute_error) 3 可释方差得分(explained_v ...
- 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件
重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件 为什么会需要这样子的一种方法来实现隐藏或者显示一个cell中的某些控件呢? 其实,隐藏cell中某 ...
- django导入/导出原始数据
1.使用dumpdata命令导出指定app对应数据库中的数据: python manage.py dumpdata your_app --indent 4 > your_app/fixture ...
- webpack笔记一 起步
webpack笔记一 起步 安装 对于大多数项目,我们建议本地安装(--save-dev).这可以在引入突破式变更(breaking change)版本时,更容易分别升级项目. 起步 初始化项目 mk ...
- Exchange 2010 服务器邮件传输配额设置详解
在企业的邮件系统管理中,传输邮件的大小配额关系到邮件队列.邮件传输速度以及关系到该附件是否能正常发送,直接关系到用户体验.为此,传输邮件大小的设置,也经常是企业邮件管理员比较迷惑的地方.如下: 1) ...
- 沉淀再出发:如何在eclipse中查看java的核心代码
沉淀再出发:如何在eclipse中查看java的核心代码 一.前言 很多时候我们在eclipse中按F3键打算查看某一个系统类的定义的时候,总是弹出找不到类这样的界面,这里我们把核心对应的代码加进 ...
- SRAM(静态)存储器芯片的读/写周期
一. 要保证正确地读/写,必须注意CPU时序与存储器读/写周期的配合.一般存储器芯片手册都会给出芯片读/写周期的时序图. Intel 2114芯片的读.写周期时序如图所示. 二. 读周期 读操作时,必 ...