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 小时前
Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
qt·学习·ubuntu
南郁9 小时前
007-nlohmann/json 项目应用-C++开源库108杰
c++·开源·json·nlohmann·现代c++·d2school·108杰
菠萝0110 小时前
共识算法Raft系列(1)——什么是Raft?
c++·后端·算法·区块链·共识算法
海棠蚀omo10 小时前
C++笔记-C++11(一)
开发语言·c++·笔记
小道士写程序11 小时前
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
开发语言·windows·qt
凌佚11 小时前
rknn优化教程(一)
c++·目标检测·性能优化
自由鬼12 小时前
数据分析图表类型及其应用场景
信息可视化·数据挖掘·数据分析
Lenyiin13 小时前
《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
c++·正则表达式·lenyiin
yxc_inspire15 小时前
基于Qt的app开发第十三天
c++·qt·app·tcp·面向对象
虾球xz16 小时前
CppCon 2015 学习:Concurrency TS Editor’s Report
开发语言·c++·学习