本文将演示如何用 Qt Charts 快速实现一个最简单的折线图显示。如果您想直接运行体验效果,可以直接点击这里下载源码编译:
0x00 最终效果
本文最后将会实现如下效果:
0x01 添加 charts 模块
Qt Charts 作为一个独立的模块,在使用前需要在项目的 pro 文件中添加:
QtExample.pro:
# 添加 Qt charts 模块
QT += charts
0x02 包含 charts 头文件并引用 QT charts 命名空间
main.cpp:
// 包含 line chart 需要的头文件
#include <QChartView>
#include <QLineSeries>
// 引用命名空间
QT_CHARTS_USE_NAMESPACE
int main(){
…
}
0x03 创建 QLineSeries 并添加数据
折线图的实现需要创建一个 QLineSeries 对象用于保存和绘制折线数据:
main.cpp:
// new 一个 QLineSeries 实例
QLineSeries *series = new QLineSeries();
// 添加实验数据, 可以用 append 方法或者 >> 操作符
series->append(0,2);
series->append(QPointF(2,6));
series->append(3,8);
series->append(7,9);
series->append(11,3);
*series << QPointF(11,2) << QPointF(15,5) << QPointF(18,4) << QPointF(19,2);
0x04 创建 QChart 用于显示数据
创建好 series 后,需要创建一个 QChart 实例并关联 series,创建坐标才能将数据显示出来:
main.cpp:
QChart *chart = new QChart();
// 将图例隐藏
chart->legend()->hide();
// 关联 series,这一步很重要,必须要将 series 关联到 QChart 才能将数据渲染出来:
chart->addSeries(series);
// 开启 OpenGL,QLineSeries 支持 GPU 绘制,Qt 其他有的图表类型是不支持的。
series->setUseOpenGL(true);
// 创建默认的坐标系(笛卡尔坐标)
chart->createDefaultAxes();
// 设置图表标题
chart->setTitle(QStringLiteral(“Qt line chart example”));
0x05 创建 QChartView 对象并显示图表
这里创建 QChartView 对象是为了将最终结果显示到界面,如果不想用 QChartView,也可以选择 QGraphicsView scene 来显示。
main.cpp:
QChartView *view = new QChartView(chart);
// 开启抗锯齿,让显示效果更好
view->setRenderHint(QPainter::Antialiasing);
view->resize(400,300);
// 显示图表
view->show();
0x06 完整源码
QtExamples.cpp:
QT += charts
SOURCES += \
main.cpp
main.cpp:
// 包含头文件
#include <QApplication>
#include <QChartView>
#include <QLineSeries>
// 引用命名空间
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLineSeries *series = new QLineSeries();
series->append(0,2);
series->append(QPointF(2,6));
series->append(3,8);
series->append(7,9);
series->append(11,3);
*series << QPointF(11,2) << QPointF(15,5) << QPointF(18,4) << QPointF(19,2);
QChart *chart = new QChart();
// 将图例隐藏
chart->legend()->hide();
// 关联 series,这一步很重要,必须要将 series 关联到 QChart 才能将数据渲染出来:
chart->addSeries(series);
// 开启 OpenGL,QLineSeries 支持 GPU 绘制,Qt 其他有的图表类型是不支持的。
series->setUseOpenGL(true);
// 创建默认的坐标系(笛卡尔坐标)
chart->createDefaultAxes();
// 设置图表标题
chart->setTitle(QStringLiteral(“Qt line chart example”));
QChartView *view = new QChartView(chart);
// 开启抗锯齿,让显示效果更好
view->setRenderHint(QPainter::Antialiasing);
view->resize(400,300);
// 显示图表
view->show();
return a.exec();
}
0x07 参考
Qt LineChart Example,或者直接在 Qt Creator 搜索 linechart:
0x08 The end :)