Qt Charts 是一个强大的工具,用于创建直观的数据可视化图表。本文将通过一个具体的示例,展示如何使用 Qt Charts 创建一个包含多条数据序列、自定义坐标轴和随机数据生成的图表。
示例代码解析
以下是一个完整的示例代码,展示如何使用 Qt Charts 创建一个数据可视化图表:
#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. 创建图表
QChart* chart = new QChart();
chart->setTitle(QStringLiteral("数据可视化图表"));
- 使用
QChart
创建一个图表对象。 - 设置图表标题。
2. 创建数据序列
QLineSeries* series0 = new QLineSeries();
QLineSeries* series1 = new QLineSeries();
series0->setName(QStringLiteral("数据序列1"));
series1->setName(QStringLiteral("数据序列2"));
- 使用
QLineSeries
创建两个数据序列。 - 通过
setName
方法为每个序列设置名称,这些名称会显示在图例中。
3. 添加数据序列到图表
chart->addSeries(series0);
chart->addSeries(series1);
- 将创建的数据序列添加到图表中。
4. 设置图表主题
chart->setTheme(QChart::ChartThemeLight);
- 设置图表的主题为浅色主题。
5. 创建坐标轴
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. 将坐标轴附加到图表和数据序列
chart->addAxis(axisX, Qt::AlignBottom);
chart->addAxis(axisY, Qt::AlignLeft);
series0->attachAxis(axisX);
series0->attachAxis(axisY);
series1->attachAxis(axisX);
series1->attachAxis(axisY);
- 将坐标轴附加到图表,并将数据序列与坐标轴关联。
7. 初始化数据
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. 创建图表视图并显示
QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);chartView->resize(800, 600);
chartView->show();
- 使用
QChartView
创建图表视图,并启用抗锯齿渲染。 - 设置图表视图的大小并显示。
总结
通过上述代码,展示了如何使用 Qt Charts 创建一个数据可视化图表。这个示例包括创建图表、添加数据序列、配置坐标轴、生成随机数据以及显示图表。可以根据实际需求进一步自定义图表的外观和行为。