QChart
是 Qt 框架中用于绘制图表的类,属于 Qt Charts 模块。它提供了一种简单而强大的方式来创建各种类型的图表,如折线图、柱状图、饼图、散点图等。QChart
可以与 QChartView
结合使用,将图表嵌入到应用程序的 GUI 中。
QAbstractSeries
的子类(如 QLineSeries
、QBarSeries
等)管理图表的数据。QValueAxis
)、分类轴(QCategoryAxis
)和日期时间轴(QDateTimeAxis
)。QChart::ChartThemeLight
)。QLineSeries
:折线图。QBarSeries
:柱状图。QPieSeries
:饼图。QScatterSeries
:散点图。QAreaSeries
:面积图。QValueAxis
:数值轴。QCategoryAxis
:分类轴。QDateTimeAxis
:日期时间轴。QChart
嵌入到 GUI 中。addSeries(QAbstractSeries *series)
:向图表中添加一个数据系列。addAxis(QAbstractAxis *axis, Qt::Alignment alignment)
:向图表中添加一个轴。setAxisX(QAbstractAxis *axis, QAbstractSeries *series)
:为指定系列设置 X 轴。setAxisY(QAbstractAxis *axis, QAbstractSeries *series)
:为指定系列设置 Y 轴。setTitle(const QString &title)
:设置图表的标题。legend()->setVisible(bool visible)
:显示或隐藏图例。legend()->setAlignment(Qt::Alignment alignment)
:设置图例的位置。setTheme(QChart::ChartTheme theme)
:设置图表的主题(如 QChart::ChartThemeLight
)。setAnimationOptions(QChart::AnimationOptions options)
:设置动画效果。setRubberBand(QChartView::RubberBand rubberBand)
:启用缩放或平移功能。QChart
对象。QLineSeries
、QBarSeries
等)并添加数据。QValueAxis
、QCategoryAxis
等)并设置到图表中。QChartView
中并显示。以下是一个完整的示例,展示如何使用 QChart
创建折线图、柱状图、饼图、散点图和面积图。每个图表都显示在一个单独的窗口中。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
QT_CHARTS_USE_NAMESPACE // 使用 Qt Charts 命名空间
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 1. 折线图
QLineSeries *lineSeries = new QLineSeries();
lineSeries->append(0, 6);
lineSeries->append(1, 4);
lineSeries->append(2, 8);
lineSeries->append(3, 4);
lineSeries->append(4, 5);
lineSeries->append(5, 9);
QChart *lineChart = new QChart();
lineChart->addSeries(lineSeries);
lineChart->setTitle("Line Chart");
QValueAxis *axisX = new QValueAxis();
axisX->setRange(0, 5);
axisX->setTitleText("X Axis");
QValueAxis *axisY = new QValueAxis();
axisY->setRange(0, 10);
axisY->setTitleText("Y Axis");
lineChart->addAxis(axisX, Qt::AlignBottom);
lineChart->addAxis(axisY, Qt::AlignLeft);
lineSeries->attachAxis(axisX);
lineSeries->attachAxis(axisY);
QChartView *lineChartView = new QChartView(lineChart);
lineChartView->setRenderHint(QPainter::Antialiasing);
lineChartView->resize(800, 600);
lineChartView->setWindowTitle("Line Chart");
lineChartView->show();
// 2. 柱状图
QBarSet *barSet = new QBarSet("Data");
*barSet << 6 << 4 << 8 << 4 << 5 << 9;
QBarSeries *barSeries = new QBarSeries();
barSeries->append(barSet);
QChart *barChart = new QChart();
barChart->addSeries(barSeries);
barChart->setTitle("Bar Chart");
QCategoryAxis *barAxisX = new QCategoryAxis();
barAxisX->append("Jan", 0);
barAxisX->append("Feb", 1);
barAxisX->append("Mar", 2);
barAxisX->append("Apr", 3);
barAxisX->append("May", 4);
barAxisX->append("Jun", 5);
QValueAxis *barAxisY = new QValueAxis();
barAxisY->setRange(0, 10);
barChart->addAxis(barAxisX, Qt::AlignBottom);
barChart->addAxis(barAxisY, Qt::AlignLeft);
barSeries->attachAxis(barAxisX);
barSeries->attachAxis(barAxisY);
QChartView *barChartView = new QChartView(barChart);
barChartView->setRenderHint(QPainter::Antialiasing);
barChartView->resize(800, 600);
barChartView->setWindowTitle("Bar Chart");
barChartView->show();
// 3. 饼图
QPieSeries *pieSeries = new QPieSeries();
pieSeries->append("Jan", 6);
pieSeries->append("Feb", 4);
pieSeries->append("Mar", 8);
pieSeries->append("Apr", 4);
pieSeries->append("May", 5);
pieSeries->append("Jun", 9);
QChart *pieChart = new QChart();
pieChart->addSeries(pieSeries);
pieChart->setTitle("Pie Chart");
QChartView *pieChartView = new QChartView(pieChart);
pieChartView->setRenderHint(QPainter::Antialiasing);
pieChartView->resize(800, 600);
pieChartView->setWindowTitle("Pie Chart");
pieChartView->show();
// 4. 散点图
QScatterSeries *scatterSeries = new QScatterSeries();
scatterSeries->append(0, 6);
scatterSeries->append(1, 4);
scatterSeries->append(2, 8);
scatterSeries->append(3, 4);
scatterSeries->append(4, 5);
scatterSeries->append(5, 9);
QChart *scatterChart = new QChart();
scatterChart->addSeries(scatterSeries);
scatterChart->setTitle("Scatter Chart");
QValueAxis *scatterAxisX = new QValueAxis();
scatterAxisX->setRange(0, 5);
scatterAxisX->setTitleText("X Axis");
QValueAxis *scatterAxisY = new QValueAxis();
scatterAxisY->setRange(0, 10);
scatterAxisY->setTitleText("Y Axis");
scatterChart->addAxis(scatterAxisX, Qt::AlignBottom);
scatterChart->addAxis(scatterAxisY, Qt::AlignLeft);
scatterSeries->attachAxis(scatterAxisX);
scatterSeries->attachAxis(scatterAxisY);
QChartView *scatterChartView = new QChartView(scatterChart);
scatterChartView->setRenderHint(QPainter::Antialiasing);
scatterChartView->resize(800, 600);
scatterChartView->setWindowTitle("Scatter Chart");
scatterChartView->show();
// 5. 面积图
QLineSeries *upperSeries = new QLineSeries();
upperSeries->append(0, 6);
upperSeries->append(1, 4);
upperSeries->append(2, 8);
upperSeries->append(3, 4);
upperSeries->append(4, 5);
upperSeries->append(5, 9);
QLineSeries *lowerSeries = new QLineSeries();
lowerSeries->append(0, 3);
lowerSeries->append(1, 2);
lowerSeries->append(2, 4);
lowerSeries->append(3, 2);
lowerSeries->append(4, 2.5);
lowerSeries->append(5, 4.5);
QAreaSeries *areaSeries = new QAreaSeries(upperSeries, lowerSeries);
areaSeries->setName("Area Chart");
QChart *areaChart = new QChart();
areaChart->addSeries(areaSeries);
areaChart->setTitle("Area Chart");
QValueAxis *areaAxisX = new QValueAxis();
areaAxisX->setRange(0, 5);
areaAxisX->setTitleText("X Axis");
QValueAxis *areaAxisY = new QValueAxis();
areaAxisY->setRange(0, 10);
areaAxisY->setTitleText("Y Axis");
areaChart->addAxis(areaAxisX, Qt::AlignBottom);
areaChart->addAxis(areaAxisY, Qt::AlignLeft);
areaSeries->attachAxis(areaAxisX);
areaSeries->attachAxis(areaAxisY);
QChartView *areaChartView = new QChartView(areaChart);
areaChartView->setRenderHint(QPainter::Antialiasing);
areaChartView->resize(800, 600);
areaChartView->setWindowTitle("Area Chart");
areaChartView->show();
return app.exec();
}
QLineSeries
创建折线图,并设置 X 轴和 Y 轴。QBarSeries
和 QBarSet
创建柱状图,并设置分类轴和数值轴。QPieSeries
创建饼图,并直接添加到图表中。QScatterSeries
创建散点图,并设置 X 轴和 Y 轴。QAreaSeries
创建面积图,需要提供上边界和下边界的数据系列。运行程序后,会显示五个窗口,分别展示:
这个示例展示了如何使用 QChart
创建多种类型的图表。通过 QChartView
,可以轻松地将图表嵌入到应用程序中。Qt Charts 模块提供了丰富的功能,适合用于数据可视化、报表生成等场景。