Qt中的Qt Charts

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt中的Qt Charts相关的知识,希望对你有一定的参考价值。

参考技术A Qt Charts用来创建各种数据图表/曲线,如下图所示。

Qt Charts的核心是 QChartView(显示图表)和QChart(管理数据)。

QChart类用于管理各种数据序列(series),以及图表相关的对象,如图例(legend)和坐标轴(axis)

QChart类用来 管理 图表的数据序列(series)、图例(legends)和坐标轴(axes)。

QChart继承自QGraphicsWidget类,可以在QGraphicsScene中显示。QChart管理图表的不同类型的图形表示,包括序列,标题和坐标轴。显示QChat最简单的方式是使用QChatView。

此外,还可以用QPolarChart(它继承自QChart)来表示折线图(line),曲线图(spline),饼状图(area)和散点图(Scatter)。

QChartView是一个能够显示图表的widget。

其中最重要的一个函数是:

void QChartView::setChart( QChart *chart)

该函数把QChartView的当前图表设为chart,新chart的所有权归QChartView所有。前一个chart(如果有)和QChartView的关系解除,必须delete前一个chart以防止内存泄露。

void QXYSeries::replace( QList < QPointF > points)

void QXYSeries::replace( QVector < QPointF > points)

以上两个函数的速度最快,要比逐点 replace 或 clear + append 新数据要快得多。replace或append是实现动态绘图的基础。

而 QVecto r的速度通常比 QList 更快,前者是内存连续的。

void setName(const QString &name):设置序列的名字,该名字显示在序列的 legend 上,支持html格式。

坐标轴的基类是QAbstractAxis,轴上的数据时real/double型的。

Legend用来给图标添加图例。Legend不能被创建或删除,但可以隐藏。它可以放在图标的上、下、左、右,默认在上面。

Legend上显示的名字是对应Series的名字,用 QAbstractSeries::setName(QString& name)设置。

Qt官方文档:QChart类;

Qt官方文档:Qt Charts Overview;

QTCharts入门 使用QChartView做折线图

在Qt中使用 Qt Chart 5.7.0

如何安装 Qt Chart 5.7.0 可以参照这篇博文http://blog.csdn.net/accelerated1987/article/details/50564312

安装完毕后,新建一个widget项目,然后按照下面的步骤添加组件。

1、在pro文件中添加QT       += charts

1、在界面使用Qt Creator添加一个widget组件,然后提升为QChartView。提升的时候,这样写提升为的类:QtCharts::QChartView,头文件写:qchartview.h。

技术分享

2、在mainwindow.cpp中添加一段折线图表。方法:首先加入QChart的命名空间QT_CHARTS_USE_NAMESPACE,在代码中加上如下语句:

技术分享
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>

QT_CHARTS_USE_NAMESPACE

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QLineSeries *series = new QLineSeries();

    series->append(0, 6);
    series->append(2, 4);
    series->append(3, 8);
    series->append(7, 4);
    series->append(10, 5);
    *series << QPointF(11, 1) << QPointF(13, 3) << QPointF(17, 6) << QPointF(18, 3) << QPointF(20, 2);

    QChart *chart = new QChart();
    chart->legend()->hide();
    chart->addSeries(series);
    chart->createDefaultAxes();
    chart->setTitle("Simple line chart example");

    ui->widget->setChart(chart);
    ui->widget->setRenderHint(QPainter::Antialiasing);
}

MainWindow::~MainWindow()
{
    delete ui;
}
mainwindow.cpp

3、运行,看到结果。
技术分享

以上是关于Qt中的Qt Charts的主要内容,如果未能解决你的问题,请参考以下文章

Qt--Qt中的事件处理

Qt 中的键盘输入

Qt中的Framebuffer

QT中的SOCKET编程(QT-2.3.2)

获取 Qt 小部件以更新使用 Qt Designer 制作的 Qt 表单中的鼠标事件

QT中的信号与事件,多线程