坐标轴-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();
}
修改主题后
#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;
}