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 創建一個數據可視化圖表。這個示例包括創建圖表、添加數據序列、配置坐標軸、生成隨機數據以及顯示圖表。可以根據實際需求進一步自定義圖表的外觀和行為。