本页内容

Qt Charts 概述

Qt Charts 支持创建时尚、交互式且以数据为中心的用户界面。Qt Charts 采用Graphics View Framework以便于集成。图表组件可作为QWidget 或QGraphicsWidget 对象,或 QML 类型使用。

浅色主题下六种图表类型的展示:面积图、饼图、折线图、柱状图、样条图和散点图

注意: 自 Qt 6.10 起,“ Qt Charts ”模块 已被废弃。对于新项目,请改用 Qt Graphs 模块。Qt Graphs 利用各平台的原生渲染后端(macOS上的Metal、Windows上的DirectX、Linux上的OpenGL或Vulkan)来实现2D和3D图表的硬件加速渲染。Qt Graphs 使用 Qt Quick Shapes 进行 2D 图表渲染,而非Qt Charts 模块所使用的已过时的 Qt Graphics View Framework。若要从Qt Charts 迁移至Qt Graphs 模块,请参阅Qt Graphs Migration fromQt Charts 。

QChart 类负责管理不同类型数据序列以及图表相关对象(如图例和坐标轴)的图形化呈现。QChart 是一个QGraphicsWidget ,可显示在QGraphicsScene 中。更简便的解决方案是使用便捷类 QChartView 代替 QChart,在布局中显示图表。 在 QML 中,图表使用 ChartView 类型进行显示。

某些图表组件还可以通过 QPolarChart 类(它是 QChart 类的特化类)或 PolarChartView QML 类型(它是 ChartView 类型的特化类)以极坐标图的形式呈现。

可以通过使用主题、修改颜色和属性、隐藏图表组件或对图表进行动画处理来定制图表的外观和风格。

模型映射器允许将从QAbstractItemModel 类派生的数据模型用作图表的数据源。模型映射器可以是水平型的,也可以是垂直型的。

图表类型

Qt Charts 模块提供以下图表类型:

在 QML 中,每种图表类型都由一个从 QAbstractSeries 派生的类或从 AbstractSeries 派生的类型表示。通过使用系列类的实例并将其添加到 QChart 或 ChartView 实例中,即可创建图表。

例如:

QLineSeries* series = new QLineSeries();
series->add(0, 6);
series->add(2, 4);
...
chartView->chart()->addSeries(series);
chartView->chart()->createDefaultAxes();

或者,在 QML 中:

ChartView {
    id: chart
    title: "Top-5 car brand shares in Finland"
    anchors.fill: parent
    legend.alignment: Qt.AlignBottom
    antialiasing: true

    property variant othersSlice: 0

    PieSeries {
        id: pieSeries
        PieSlice { label: "Volkswagen"; value: 13.5 }
        PieSlice { label: "Toyota"; value: 10.9 }
        PieSlice { label: "Ford"; value: 8.6 }
        PieSlice { label: "Skoda"; value: 8.2 }
        PieSlice { label: "Volvo"; value: 6.8 }
    }

    Component.onCompleted: {
        // You can also manipulate slices dynamically, like append a slice or set a slice exploded
        othersSlice = pieSeries.append("Others", 52.0);
        pieSeries.find("Volkswagen").exploded = true;
    }
}

import QtQuick

您可以在一个图表中组合不同类型的系列。

折线图和样条曲线图

折线图和样条曲线图通过由直线连接的一系列数据点来呈现数据。在折线图中,数据点由直线连接;而在样条曲线图中,数据点则由样条曲线连接。样条曲线通过QPainterPath 绘制。

一条直线连接数据点的折线图,数据点呈剧烈波动 一条平滑弯曲的曲线,时而达到峰值,时而回落,随后再次上升的样条图

线图通过使用 QLineSeries 类或 LineSeries QML 类型来实现。

样条图可通过继承自 QLineSeries 的 QSplineSeries 类,或继承自 LineSeries 的 SplineSeries 类型来实现。

有关更多信息,请参阅《创建折线图》和《创建样条图》。有关将折线图与柱状图结合并为其共用一个坐标轴的示例,请参阅《结合折线图和柱状图》。

面积图和散点图

面积图将数据呈现为由两条线界定的区域,而散点图将数据呈现为一组点。

面积图示例的屏幕截图 散点图,将三个数据系列分别绘制为圆形、方形和星形标记

面积图可通过 QAreaSeries 类或 AreaSeries QML 类型实现。默认情况下,x 轴用作其中一条边界,QLineSeries 或 LineSeries 用作另一条边界。不过,您也可以使用 QLineSeries 或 LineSeries 作为两条边界。

散点图可通过 QScatterSeries 类或 ScatterSeries QML 类型实现。

有关更多信息,请参阅《创建面积图》和《创建散点图》。

条形图

条形图将数据以按类别分组的水平或垂直条形显示。QBarSet 类和 BarSet QML 类型代表条形图中的一组条形。 QAbstractBarSeries 类是所有条形系列类的抽象父类,而 AbstractBarSeries 类型则是条形系列类型的父类型。系列类型决定了数据的呈现方式。

QBarSeries 类和 BarSeries QML 类型将数据以按类别分组的垂直条形形式呈现。同样,QHorizontalBarSeries 类和 HorizontalBarSeries QML 类型将数据以水平条形形式呈现。

将1月至6月期间5人的月度数据分组显示的竖条形图 将五人的月度数据分组显示的水平条形图

QStackedBarSeries 类和 StackedBarSeries 类型将一组数据呈现为垂直堆叠的条形,每个类别对应一个条形。相应的水平类和类型分别是 QHorizontalStackedBarSeries 和 HorizontalStackedBarSeries。

从1月到6月,每月5组数据的垂直堆叠条形图 水平堆叠条形图,每组代表一个月,共五组

QPercentBarSeries 类和 PercentBarSeries QML 类型将一系列按类别划分的数据以各类别的百分比形式呈现。相应的水平类和类型分别是 QHorizontalPercentBarSeries 和 HorizontalPercentBarSeries。

垂直百分比条形图,每个月的条形在五个数据集中均填充至100% 水平百分比条形图,每个月的条形均占100%

有关更多信息,请参阅《创建条形图》、《创建水平堆叠条形图》、《创建水平条形图》和《创建水平百分比条形图》。

饼图

饼图将数据以由饼片组成的饼图形式呈现。饼图通过 QPieSeries 类或 PieSeries QML 类型实现,饼片则通过 QPieSlice 类或 PieSlice QML 类型添加。

通过指定 0.0 到 1.0 之间的孔径大小,可以将饼图转换为环形图。

显示了饼图中一个被高亮显示的扇区的屏幕截图 显示了环形图中一个被高亮显示的扇区的屏幕截图

有关更多信息,请参阅《带小部件的图表图库》、《创建环形分类图表》和《创建嵌套环形图表》。

箱线图

箱线图将数据以四分位数形式呈现,并通过延伸的线段(即“须”)显示值的变异性。 箱线图系列中的项目按类别分组,这与条形系列中的条形集类似。对于每个箱线图项目,都会指定下极值、下四分位数、中位数、上四分位数和上极值。

箱线图可通过使用 QBoxPlotSeries 和 QBoxSet 类,或 BoxPlotSeries 和 BoxSet QML 类型来实现。

2012年两家公司月度股价波动情况的箱线图

有关更多信息,请参阅《创建箱线图》。

K线图

K线图将数据系列以K线的形式呈现。

显示一个月内股票日数据的K线图,绿色K线表示上涨,红色K线表示下跌

K 线图可通过使用 QCandlestickSeries 和 QCandlestickSet 类,或 CandlestickSeries 和 CandlestickSet QML 类型来实现。

极坐标图

极坐标图以圆形图表呈现数据,其中数据的位置基于与图表中心(极点)之间的角度和距离。

极坐标图,包含一个散点数据系列和一条绿色样条曲线,该曲线在圆形网格上勾勒出一个星形区域

QPolarChart 类是 QChart 类的特化类。它支持线型、样条线、面积和散点系列,以及这些系列所支持的所有坐标轴类型。坐标轴既可作为径向轴,也可作为角轴使用。在 QML 中,对应的类型是 PolarChartView。

有关更多信息,请参阅《创建极坐标图》和《在 QML 中使用极坐标图》。

坐标轴

Qt Charts 支持以下坐标轴类型:

  • 数值轴
  • 类别轴
  • 条形类别轴
  • 日期时间轴
  • 对数数值轴

可以设置轴以显示带有刻度、网格线和阴影的线条。轴上的数值绘制在刻度位置处。所有轴类型都是 QAbstractAxis 类或 AbstractAxis QML 类型的特化类。

数值轴会在图表轴上添加实际数值。它通过 QValueAxis 类或 ValueAxis QML 类型实现。

类别轴通过 QCategoryAxis 类或 CategoryAxis QML 类型实现。它具有命名范围和可调整的范围宽度。

条形类别轴与类别轴类似,但所有区间的宽度均相同。条形类别轴通过 QBarCategoryAxis 类或 BarCategoryAxis QML 类型实现。

日期时间轴为图表轴添加日期和时间。它通过 QDateTimeAxis 类或 DateTimeAxis QML 类型实现。

对数轴为图表的轴添加对数刻度。对数刻度是一种基于数量级的非线性刻度,因此轴上的每个刻度标记都是前一个刻度标记乘以某个值的产物。 对数轴可通过 QLogValueAxis 类或 LogValueAxis QML 类型实现。

一个图表可以定义多个坐标轴。这些坐标轴可以放置在图表的下方、上方、左侧或右侧。此外,坐标轴可以是不同类型。但是,不支持混合会导致不同定义域的坐标轴类型,例如在同一方向上同时指定 QValueAxis 和 QLogValueAxis。

有关更多信息,请参阅《带日期和时间坐标轴的折线图》、《使用对数值坐标轴》、《使用多个坐标轴》以及《在 QML 中使用坐标轴》。

图例

图例是一个用于显示图表说明的图形对象。图例对象无法被创建或删除,但可以通过 QChart 类或 ChartView QML 类型进行引用。当系列发生变化时,QChart 或 ChartView 会更新图例的状态。

图例可位于图表的上方或下方,也可位于其左侧或右侧。默认情况下,图例与图表视图绑定,但可以将其分离为一个单独的图形项,以便自由移动。

可以隐藏图例中的单个标记,也可以隐藏整个图例。

可以通过使用基类 QLegendMarker 以及针对每种系列类型的子类(QAreaLegendMarker、QBarLegendMarker、QBoxPlotLegendMarker、QCandlestickLegendMarker 和 QXYLegendMarker)来修改图例标记。

在 QML 中,可以通过创建自定义图例来修改图例标记,如“自定义图例”示例所示。

与图表交互

最终用户可以通过动态向图表添加值、深入挖掘数据、放大或缩小图表、滚动图表,以及点击图表中的项目或将鼠标悬停在项目上,与图表进行交互。

动态绘制数据

可以动态地向图表添加数据,并使图表视图自动滚动以显示新数据。

有关详细信息,请参阅“创建样条图”。

对数据进行钻取

例如,可以在条形图或饼图中实现钻取效果。当用户在图表中选择一个项目时,将显示该项目的更详细视图。这是通过删除第一个数据系列并添加另一个数据系列来实现的。

有关详细信息,请参阅《实现数据钻取》。

缩放与滚动

用户可以使用键盘进行缩放和滚动。他们可以使用方向键滚动图表,并使用加号和减号键放大或缩小图表。此外,还可以使用QRubberBand 来选择要放大的区域。

在触控设备上,可使用手势进行平移和缩放。

有关详细信息,请参阅“缩放线示例”。

单击和悬停

您可以将插槽连接到最终用户点击图表中的项目或将鼠标悬停在项目上时触发的信号。这使您能够向图表中添加元素,例如说明框。

有关详细信息,请参阅在图表上方绘制说明框。

主题

主题是一组内置的 UI 样式相关设置,适用于图表的所有视觉元素,例如数据系列的颜色、笔触、画笔和字体,以及坐标轴、标题和图例。

“Blue Cerulean”主题下六种图表类型的图集(深色背景)

Qt Charts 该软件自带以下预定义主题:

  • 浅色主题(默认主题)
  • 天蓝色主题
  • 深色主题
  • 沙褐色主题
  • 自然色彩系统(NCS)蓝色主题
  • 高对比度主题
  • 冰蓝色主题
  • Qt 主题

可以通过更改颜色、画笔、笔刷和字体来自定义这些主题。通过修改Qt Charts 源代码可以添加新主题。

注意:更改 主题将覆盖该系列之前应用的所有自定义设置。

有关更多信息,请参阅《使用主题创建图表》。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.