使用QChartView做折线图

基本概念

坐标轴-QAbstractAxis:
图表中,一般都有 X、Y 坐标轴,复杂一些的还带有 Z 轴。对应到 Qt 的图表也有 X、Y 轴对象。但是今天,我们先不展开介绍。如果我们不创建轴坐标对应的对象,可以使用 Qt 的默认轴对象

系列-QAbstractSeries:
不论是曲线、饼图、棒图还是其他图表,其中展示的内容本质都是数据。一条曲线是一组数据,一个饼图也对应一组数据。在 Qt Charts 中,这些一组组的数据被称作系列。对应不同类型的图表 Qt 提供了不同的系列。系列除了负责存储、访问数据,应该还提供了数据的绘制方法,比如折线图和曲线图分别对应 QLineSerie 和 QSPLineSerie。我们可以用不同的系列达到不同的展示目的。

图例-Legend:
类似于 Excel,Qt Charts 中也提供了图例,并且还可以显示或者隐藏图例。

图表-QChart:
Qt 提供了 QChart 类来封装前面所说的内容,比如坐标轴、系列、图例等。QChart 承担了一个组织、管理的角色。QChart 派生自 QGraphicsObject,因此它实际上是一个图元 item。我们可以从 QChart 获取到坐标轴对象、数据系列对象、图例等等,并且可以设置图表的主题、背景色等样式信息。

视图-QChartView:
负责 QChart 的展示。QChart 本身只负责图表内容的组织、管理。 图表的展示由视图负责,这个视图就是 QChartView。QChartView 派生自 QGraphicsView,只是它专门提供了几个面向 QChart 的接口,比如 setChart(QChart*)等

工程代码

.pro文件中添加

QT       += charts

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

QT_CHARTS_USE_NAMESPACE

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;

    QChart   *chart;   //画笔
    QChartView *chartView;//画布
    QLineSeries *series;//折线
};

#endif // MAINWINDOW_H

其中QT_CHARTS_USE_NAMESPACE宏必须在ui_xxx.h之前定义,因为ui_xxx.h也需要它
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 

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

    chart = new QChart;//画笔
    series = new QLineSeries();//折线
    for(int i = 0; i < 100; i++)
    {
        series->append(i, sin(0.6f*i));
    }
    chart->addSeries(series);
    chart->createDefaultAxes();//基于已经添加的series创建默认坐标轴

    chartView = new QChartView(chart); //画布
//    chartView->setBackgroundBrush(Qt::green);
    chartView->setRenderHint(QPainter::Antialiasing);//抗锯齿

    this->setCentralWidget(chartView);//显示在主窗口上
}

MainWindow::~MainWindow()
{
    delete ui;
}

main.cpp中没有修改

#include "mainwindow.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

其效果如下
使用QChartView做折线图_第1张图片

修改主题后

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include 


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

    chart = new QChart;//画笔
    series = new QLineSeries();//折线
    for(int i = 0; i < 100; i++)//折线添加数据
    {
        series->append(i, sin(0.6f*i));
    }


    chart->addSeries(series);
    chart->createDefaultAxes();//基于已经添加的series创建默认坐标轴 须在addSeries之后调用才有效
    chart->setTheme(QtCharts::QChart::ChartThemeBlueCerulean);//设置主题
    chart->legend()->hide();//隐藏图例
    chart->setTitle(QString::fromLocal8Bit("Polyline Chart"));//为图表添加标题

    chartView = new QChartView(chart); //画布
    chartView->setRenderHint(QPainter::Antialiasing);//抗锯齿

    this->setCentralWidget(chartView);

}

MainWindow::~MainWindow()
{
//    chart->removeAllSeries();
    delete series;
    delete ui;
}

使用QChartView做折线图_第2张图片

你可能感兴趣的:(QT)