C++使用Qt Charts创建数据可视化图表

Qt Charts 是一个强大的工具,用于创建直观的数据可视化图表。本文将通过一个具体的示例,展示如何使用 Qt Charts 创建一个包含多条数据序列、自定义坐标轴和随机数据生成的图表。

示例代码解析

以下是一个完整的示例代码,展示如何使用 Qt Charts 创建一个数据可视化图表:

cpp 复制代码
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QRandomGenerator>

using namespace QtCharts;

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    // 设置全局字体
    QFont font("Microsoft YaHei");
    font.setPointSize(10);
    QApplication::setFont(font);

    // 创建图表
    QChart* chart = new QChart();
    chart->setTitle(QStringLiteral("数据可视化图表"));

    // 创建数据序列
    QLineSeries* series0 = new QLineSeries();
    QLineSeries* series1 = new QLineSeries();
    series0->setName(QStringLiteral("数据序列1"));
    series1->setName(QStringLiteral("数据序列2"));

    // 添加数据序列到图表
    chart->addSeries(series0);
    chart->addSeries(series1);

    // 设置图表主题
    chart->setTheme(QChart::ChartThemeLight);

    // 创建坐标轴
    QValueAxis* axisX = new QValueAxis;
    axisX->setRange(1, 100);
    axisX->setTitleText(QStringLiteral("X轴标题"));
    axisX->setLabelFormat("%d %");
    axisX->setTickCount(3);
    axisX->setMinorTickCount(3);

    QValueAxis* axisY = new QValueAxis;
    axisY->setRange(0, 100);
    axisY->setTitleText(QStringLiteral("Y轴标题"));
    axisY->setLabelFormat("%d %");
    axisY->setTickCount(3);
    axisY->setMinorTickCount(3);

    // 将坐标轴附加到图表和数据序列
    chart->addAxis(axisX, Qt::AlignBottom);
    chart->addAxis(axisY, Qt::AlignLeft);
    series0->attachAxis(axisX);
    series0->attachAxis(axisY);
    series1->attachAxis(axisX);
    series1->attachAxis(axisY);

    // 初始化数据
    qreal t = 0, intv = 1;
    for (int i = 1; i < 100; i++) {
        int randomInt = QRandomGenerator::global()->bounded(101);
        int randomInt2 = QRandomGenerator::global()->bounded(84);
        series0->append(t, randomInt2);
        series1->append(t, randomInt);
        t += intv;
    }

    // 创建图表视图
    QChartView* chartView = new QChartView(chart);
    chartView->setRenderHint(QPainter::Antialiasing);

    // 显示图表
    chartView->resize(800, 600);
    chartView->show();

    return app.exec();
}

代码详解

1. 创建图表

cpp 复制代码
QChart* chart = new QChart();
chart->setTitle(QStringLiteral("数据可视化图表"));
  • 使用 QChart 创建一个图表对象。
  • 设置图表标题。

2. 创建数据序列

cpp 复制代码
QLineSeries* series0 = new QLineSeries();
QLineSeries* series1 = new QLineSeries();
series0->setName(QStringLiteral("数据序列1"));
series1->setName(QStringLiteral("数据序列2"));
  • 使用 QLineSeries 创建两个数据序列。
  • 通过 setName 方法为每个序列设置名称,这些名称会显示在图例中。

3. 添加数据序列到图表

cpp 复制代码
chart->addSeries(series0);
chart->addSeries(series1);
  • 将创建的数据序列添加到图表中。

4. 设置图表主题

cpp 复制代码
chart->setTheme(QChart::ChartThemeLight);
  • 设置图表的主题为浅色主题。

5. 创建坐标轴

cpp 复制代码
QValueAxis* axisX = new QValueAxis;
axisX->setRange(1, 100);
axisX->setTitleText(QStringLiteral("X轴标题"));
axisX->setLabelFormat("%d %");
axisX->setTickCount(3);
axisX->setMinorTickCount(3);

QValueAxis* axisY = new QValueAxis;
axisY->setRange(0, 100);
axisY->setTitleText(QStringLiteral("Y轴标题"));
axisY->setLabelFormat("%d %");
axisY->setTickCount(3);
axisY->setMinorTickCount(3);
  • 使用 QValueAxis 创建 X 轴和 Y 轴。
  • 设置坐标轴的范围、标题、标签格式、刻度数和次刻度数。

6. 将坐标轴附加到图表和数据序列

cpp 复制代码
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series0->attachAxis(axisX);
series0->attachAxis(axisY);
series1->attachAxis(axisX);
series1->attachAxis(axisY);
  • 将坐标轴附加到图表,并将数据序列与坐标轴关联。

7. 初始化数据

cpp 复制代码
qreal t = 0, intv = 1;
for (int i = 1; i < 100; i++) {
    int randomInt = QRandomGenerator::global()->bounded(101);
    int randomInt2 = QRandomGenerator::global()->bounded(84);
    series0->append(t, randomInt2);
    series1->append(t, randomInt);
    t += intv;
}
  • 使用 QRandomGenerator 生成随机数据。
  • 将随机数据添加到数据序列中。

8. 创建图表视图并显示

cpp 复制代码
QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);

chartView->resize(800, 600);
chartView->show();
  • 使用 QChartView 创建图表视图,并启用抗锯齿渲染。
  • 设置图表视图的大小并显示。

总结

通过上述代码,展示了如何使用 Qt Charts 创建一个数据可视化图表。这个示例包括创建图表、添加数据序列、配置坐标轴、生成随机数据以及显示图表。可以根据实际需求进一步自定义图表的外观和行为。

相关推荐
凡人叶枫1 天前
Effective C++ 条款17:以独立语句将 newed 对象置入智能指针
java·linux·开发语言·c++·算法
凡人叶枫1 天前
Effective C++ 条款16:成对使用 new 和 delete 时要采取相同形式
开发语言·c++·effective c++
不吃土豆的马铃薯1 天前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
数据法师1 天前
QuickSay :基于 Qt 的轻量级快捷短语管理工具
开发语言·qt
.千余1 天前
【C++】C++继承入门(下):友元、静态成员与菱形继承的底层逻辑
开发语言·c++·笔记·学习·其他
财经资讯数据_灵砚智能1 天前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月10日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
小短腿的代码世界1 天前
行情快照与增量更新引擎:Qt在高频交易数据分发中的核心架构——你的行情推送为什么延迟了500ms?
开发语言·qt·架构
初中就开始混世的大魔王1 天前
6 Fast DDS-传输层
开发语言·c++·中间件·信息与通信
DogDaoDao1 天前
深入理解 Qt:从原理到实战的全景指南
开发语言·qt·程序员
代码中介商1 天前
C++ 智能指针完全指南(三):weak_ptr 与循环引用
开发语言·c++