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 创建一个数据可视化图表。这个示例包括创建图表、添加数据序列、配置坐标轴、生成随机数据以及显示图表。可以根据实际需求进一步自定义图表的外观和行为。