QtCharts画线图主要三个部分组成 QLIneSeries或QSplineSeries用于保存联系的坐标位置数据,QChart用于管理图像显示,例如图例,坐标主题等,QChartView则用于显示。

上代码

#ifndef WIDGET_H
#define WIDGET_H
#define SPLINE #include <QWidget>
#include <QList>
#include <QTimerEvent>
#include <QtCharts/QLineSeries>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE class Widget : public QWidget
{
Q_OBJECT public:
Widget(QWidget *parent = nullptr);
~Widget(); protected:
void timerEvent(QTimerEvent *event);
private:
void dataRefresh(QList<float> *t);
Ui::Widget *ui;
int _timerid;
int _x = 20;
int _y = 80;
int _lineNumber = 10;
QList<QList<float >*> *_data;
#ifndef SPLINE
QList<QtCharts::QLineSeries*> *_lines;
#else
QList<QtCharts::QSplineSeries*> *_splines;
#endif
QtCharts::QChart * _chart;
QtCharts::QChartView * _chartView;
int count = 0;
};
#endif // WIDGET_H

下面是cpp

#include "widget.h"
#include "./ui_widget.h"
#include <QDateTime>
#include <QtWidgets/QHBoxLayout>
#include <QtCharts/QValueAxis>
#include <QDebug> Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
_data = new QList<QList<float >*>();
#ifndef SPLINE
_lines = new QList<QtCharts::QLineSeries*>();
#else
_splines = new QList<QtCharts::QSplineSeries*>();
#endif
_chart = new QtCharts::QChart();
for(int i = 0; i< _lineNumber; i++)
{
#ifndef SPLINE
QtCharts::QLineSeries *s = new QtCharts::QLineSeries();
connect(s, &QtCharts::QLineSeries::clicked,[](const QPointF& pointF){qDebug()<< pointF;});
_lines->push_back(s);
#else
QtCharts::QSplineSeries *s = new QtCharts::QSplineSeries();
connect(s, &QtCharts::QSplineSeries::clicked,[](const QPointF& pointF){qDebug()<<pointF;});
_splines->push_back(s);
#endif s->setPointLabelsClipping(false);
s->setPointLabelsVisible(true);
s->setPointsVisible(true);
s->setPointLabelsFormat(QStringLiteral("(@xPoint,@yPoint)"));
s->setName(QString::fromStdString("温度")+QString::number(i));
//文档说明使用OpenGL加速可以更快的的勾画并且支持更多的点,但是会缺乏一些显示功能相对与CPU渲染
// s->setUseOpenGL(true);
qDebug()<<"OpenGL:"<<s->useOpenGL();
_chart->addSeries(s);
}
_chart->setTitle(QString("曲线图"));
QtCharts::QValueAxis *x = new QtCharts::QValueAxis();
x->setRange(0, _x);
x->setTitleText(QString::fromStdString("min"));
x->setTickCount(30);
QtCharts::QValueAxis *y = new QtCharts::QValueAxis();
y->setRange(0, _y);
y->setTitleText(QString::fromStdString("摄氏度"));
y->setTickCount(20);
_chart->addAxis(x,Qt::AlignBottom);
_chart->addAxis(y,Qt::AlignLeft);
for(int i = 0; i< _lineNumber; i++){
#ifndef SPLINE
(*_lines)[i]->attachAxis(x);
(*_lines)[i]->attachAxis(y);
#else
(*_splines)[i]->attachAxis(x);
(*_splines)[i]->attachAxis(y);
#endif
} _chart->legend()->show();
// _chart->createDefaultAxes();
_chartView = new QtCharts::QChartView(_chart);
_chartView->setRenderHint(QPainter::Antialiasing);
// _chartView->setRubberBand(QtCharts::QChartView::RectangleRubberBand);
QHBoxLayout *h_layout = new QHBoxLayout();
h_layout->addWidget(_chartView);
setLayout(h_layout);
_timerid = startTimer(1000);
qsrand(QDateTime::currentDateTime().toTime_t()); } Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *event) {
if(event->timerId() == _timerid)
{
QList<float > *v_list = new QList<float >();
for (int i = 0; i < _lineNumber; i++) {
float v = qrand() % _y;
v_list->push_back(v);
}
dataRefresh(v_list);
}
} void Widget::dataRefresh(QList<float> *t) {
if(_data->length() >= _x)
{
_data->clear();
#ifndef SPLINE
for(int i=0; i < _lines->length();i++)
{
(*_lines)[i]->clear();
}
#else
for (int i = 0; i < _splines->length(); ++i) {
(*_splines)[i]->clear();
}
#endif
}
_data->push_back(t);
for (int i = 0; i < _lineNumber; ++i) {
qDebug()<<_data->length()-1<<(*_data->last())[i];
#ifndef SPLINE
(*_lines)[i]->append((_data->length()-1),(*_data->last())[i]);
#else
(*_splines)[i]->append((_data->length()-1), (*_data->last())[i]);
#endif
}
qDebug()<< ++count; }

本人是在ubuntu18.04平台 Qt版本5.12.6下进行的测试,用cmake进行的组织,使用了一个SPLINE宏进行了两个折线和曲线的切换。测试时发现series使用OpenGl渲染出现明显锯齿并且无法显示坐标点图标,所以本模所有功能块未对GPU渲染提供完全支持,官方文档也提供了提示。

如过要使用OpenGL加速有较多的限制,只有自己权衡了。

QtCharts模块勾画折线和曲线图的更多相关文章

  1. QtCharts模块在QtWideget中图表绘制(非QML)

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QtCharts模块在QtWideget中图表绘制(非QML)     本文地址:http:/ ...

  2. qml: QtCharts模块的使用(基本配置)------<一>

    QtCharts模块可以用于绘制图表: 导入模块: import QtCharts 2.2 例子: import QtQuick 2.0 import QtCharts 2.2 ChartView { ...

  3. qml: QtCharts模块得使用(数据整合和显示) ---- <二>

    QtCharts目前已经可以免费使用,而且使用非常方便.快捷,并且提供了各种类别的支持(例如:曲线图,柱形图,折线图,饼图等). 这里讲解qml端图表显示,C++端进行数据整合,并能实现实时数据刷新( ...

  4. python的turtle模块画折线图

    代码如下: import turtle yValues = [10.0,7.4,6.4,5.3,4.4,3.7,2.6] def main(): t = turtle.Turtle() t.hidet ...

  5. 47.QT-QChart之曲线图,饼状图,条形图使用

     1.使用准备 在pro中, 添加QT+= charts 然后在界面头文件中添加头文件并声明命名空间,添加: #include <QtCharts> QT_CHARTS_USE_NAMES ...

  6. Android实现天气预报温度/气温折线趋势图

     Android实现天气预报温度/气温折线趋势图 天气预报的APP应用中,难免会遇到绘制天气温度/气温,等关于数据趋势的折线或者曲线图,这类关于气温/温度的折线图,通常会有两条线.一条是高温线,一 ...

  7. Python中好用的模块们

    目录 Python中好用的模块们 datetime模块 subprocess模块 matplotlib折线图 importlib模块 Python中好用的模块们 datetime模块 ​ 相信我们都使 ...

  8. JHChart iOS图表工具库1.0.3新版本详解

    前言. 从2016年4月14日开始,本人着手开发了JHChart图表工具库.经过断断续续的开发,截止到现在,已经实现了折线图.柱状图.饼状图.环形图和表格样式的图表功能.为了方便使用,我已经将一个简单 ...

  9. 基于ssh框架的highcharts前后台数据交互实例

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...

随机推荐

  1. 洛谷 P6573 [BalticOI 2017] Toll 题解

    Link 算是回归OI后第一道自己写的题(考CSP的时候可没回归) 写篇题解纪念一下 题目大意: \(n\) 个点,\(m\) 条单向边,每条边的两端点 \(x\),\(y\)必定满足 \(\left ...

  2. FHE学习笔记 #2 多项式环

    https://en.wikipedia.org/wiki/Polynomial_ring https://zhuanlan.zhihu.com/p/419266064 这篇知乎文章讲的比较透彻,但是 ...

  3. .NET 7.0 重磅发布及资源汇总

    2022-11-8 .NET 7.0 作为微软的开源跨平台开发平台正式发布.微软在公告中表示.NET 7为您的应用程序带来了C# 11 / F# 7,.NET MAUI,ASP.NET Core/Bl ...

  4. 1.docker的基本使用

    1.简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化.容器是完 ...

  5. vulnhub靶场之DOUBLETROUBLE: 1

    准备: 攻击机:虚拟机kali.本机win10. 靶机:DOUBLETROUBLE: 1,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub ...

  6. cowsay和ansible

    简介 cowsay是一款有趣的ascii图案输出工具,通过它可以方便的输出一头说话的牛牛(马?): # cowsay hello frankming _________________ < he ...

  7. SQLSever视图和存储过程

    一.视图(View) 1. 为什么要学习视图? 在没有视图之前,我们都是写各种各样的SQL语句,有点,非常灵活.后面我们学习应用程序开发的时候,通过C#发送过来的SQL语句 到达数据库的时候,会执行什 ...

  8. 2022春每日一题:Day 30

    题目:[JSOI2009]电子字典 读完题后,暴力?确实,计算一下时间复杂度最坏情况下,20263*10000=1.5e8,卡一下常可以直接卡到7e7,最严格来说应该卡的过去,但是此题数据可以直接卡过 ...

  9. 2022春每日一题:Day 13

    题目:后缀排序 什么是后缀数组?他主要包含两个数组:sa和rk. 其中sa[i]表示将字符串后缀排序后第i小的编号,rk[i]表示后缀i的排名. 显然sa[rk[i]]=i,rk[sa[i]]=i. ...

  10. laravel的_token传值 ; header中传_token

    laravel框架中只要是涉及到post传值都需要传 _token ,这是框架中为了防止crsf攻击所做的安全措施,那么我们用到ajax中的post 方式传值时,也需要在所传数据中添加一个_token ...