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 ...
 
随机推荐
- WPF使用样式更新ArcGis InfoWindow外观代码
			
<Style x:Key="mainInfoWindowStyleMF" TargetType="{x:Type esri:InfoWindow}"> ...
 - Android中使用异步线程更新UI视图的几种方法
			
在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...
 - Android dialog圆角显示及解决出现的黑色棱角
			
最近在开发一个天气预报的app,看到一个比较不错友情提示,如下: 怎么样,看起来比原始的dialog好看吧.好了,做法也许有很多,我介绍下我的做法吧, 首先,我第一个想到 ...
 - Alaya Webdav Server 0.0.10 发布
			
Alaya Webdav Server 0.0.10 修复了很多 bug,Webdav 'Copy' 可以使用了. Alaya 是一个提供 WebDAV 支持的 Web 服务器,支持 HTTPS 和 ...
 - *.vue文件的template标签内使用form标签
			
由于form表单有重复提交的问题,所以在vue文件内直接使用form标签时需要注意这个问题,否则会导致页面重复刷新跳转不成功的问题 解决方案: <form @submit.prevent> ...
 - 泛型< ? extends > <? super> 理解
			
public class Test { public static void main(String [] args){ Plate<? extends Fruit> p = new Pl ...
 - iOS9 News 应用
			
iOS9 News 应用 iOS9 中国区虽然没有 News 应用,但最新的开发工具中是有的,以下是笔者截取的模拟器gif图,供君欣赏:
 - Python学习---django知识补充之CBV
			
Django知识补充之CBV Django: url --> def函数 FBV[function based view] 用函数和URL进行匹配 url --> ...
 - C#网络编程(二)应用篇
			
(一)TcpListen类.TcpClient类 TcpListener类和TcpClient类都是System.Net.Sockets命名空间下的类,利用TcpListener和TcpClient可 ...
 - JS hashMap实例详解
			
链接:http://www.jb51.net/article/85111.htm JS hashMap实例详解 作者:囧侠 字体:[增加 减小] 类型:转载 时间:2016-05-26我要评论 这篇文 ...