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 ...
随机推荐
- Visual Studio Code 保存时自动格式化的问题
烦人的说,保存的时候自动格式化, 格式话后,代码就失效了 纳尼!!!! 网上其他人都说 JS-CSS-HTML Formatter这个插件在捣蛋! 试了,的确如此. 找到他,给禁用,就不会 ...
- osgEarth编译——以VS2012为例
整理记录下 osgEarth编译过程. osgEarth是依赖于OSG的三维地理平台. 准备工作 OpenSceneGraph-3.4.0.zip OSG_3RDPARTY_DIR http:/ ...
- 关于 <mvc:argument-resolvers> 的一次使用记录
使用场景: 项目里面在做一个请求时候发现,不同的请求,有些请求会跳转到 spring mvc的自定义方法中,有些却不进去.自定义的方法: <mvc:annotation-driven > ...
- Facebook POP 使用指南
Facebook POP 使用指南 Pop是一个动画引擎,用以扩展iOS.OSX的动画类型.相较于iOS.OSX中的基本动画效果,Pop扩展后支持弹簧动画效果与衰减动画效果,你可以用Pop动画引擎来构 ...
- 3D旋转相册的实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 5 Dockerfile指令详解 && CMD 指令
CMD 指令的格式和 RUN 相似,也是两种格式: shell 格式: CMD <命令> exec 格式: CMD ["可执行文件", "参数1", ...
- 沉淀,再出发:python爬虫的再次思考
沉淀,再出发:python爬虫的再次思考 一.前言 之前笔者就写过python爬虫的相关文档,不过当时因为知识所限,理解和掌握的东西都非常的少,并且使用更多的是python2.x的版本的功能,现 ...
- LNMP-day1-安装并配置
Nginx安装 #Nginx [root@localhost downloads]# pwd /root/downloads #安装依赖pcre [root@localhost downloads]# ...
- ubuntu 14.04 配置 java 环境
下载java包 (这里以java8为例) java包的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloa ...
- JVM线程状态,park, wait, sleep, interrupt, yeild 对比
---恢复内容开始--- JVM线程状态 NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED BLOCKED是等待获得对象锁 WAIT ...