使用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 <QMainWindow>
#include <QtCharts>
#include <QValueAxis>

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 <QtMath>

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 <QApplication>

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

    return a.exec();
}

其效果如下
在这里插入图片描述

修改主题后

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

#include <QtMath>


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;
}

在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值