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 ...
随机推荐
- eclipse 断点调试快捷键
(1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Too ...
- MyEclipse 2017/2018 安装与破解 图文教程
SSM 框架-02-MyEclipse 2017/2018 安装与破解 现在在学J2EE,然后使用的工具就是 MyEclipse,现在就抛弃 Eclipse 了,我就不多说它俩的区别了,但是 MyEc ...
- 使用ZXing实现扫描多个条形码页面
1.前言 ZXing是google官方推出的跨平台的基于Java实现处理扫面二维码或者条形码的库.支持很多格式,一维条码支持UPC-A,UPC-E,EAN-8,Code 39,Code 93等格式,二 ...
- C语言二级指针(指向指针的指针)
转载:http://c.biancheng.net/cpp/html/85.html 指针可以指向一份普通类型的数据,例如 int.double.char 等,也可以指向一份指针类型的数据,例如 in ...
- GPG error: http://extras.ubuntu.com trusty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80
今天在更新运行apt-get update的时候出现了如下的错误: W: GPG error: http://extras.ubuntu.com trusty Release: The followi ...
- 学习笔记:IIS搭建PHP网站出现404错误的解决办法
关于404错误提示相信大家都遇到过吧,记得我遇到这个问题的时候,弄得我焦头烂额的,今天给大家分享下,使用IIS大家PHP网站时出现404错误提示的处理方法,希望对各位朋友有所帮助.IIS搭建PHP出现 ...
- java笔记--局部内部类认识与理解
java内部类 内部类应用最多的场景是在编写GUI程序时,将大量的事件监听处理放在了内部类中进行 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XH ...
- 按钮在执行frame动画的时候怎么响应触发事件?
按钮在执行frame动画的时候怎么响应触发事件? 代码中效果(请注意,我并没有点击到按钮,而是点击到按钮的终点frame值处): 对应的代码: // // ViewController.m // Ta ...
- linux下安装apache与php
http://www.92csz.com/study/linux/16.htm 1.apache 在如下页面下载apache的for Linux 的源码包 http://www.apache.org/ ...
- Spring配置文件中的parent与abstract
在看项目的Spring配置文件时,发现消息队列的配置采用了继承方式配置Bean,在这梳理总结一下. 其实在基于spring框架开发的项目中,如果有多个bean都是一个类的实例,如配置多个数据源时,大部 ...