文章目录

  • 前言
  • 准备工作
    • 安装QChart组件
    • 项目配置
  • 主要组成部分
    • QChartView
    • QChart
    • 序列
    • 坐标轴
    • 图例
  • 静态图表
  • 动态图表
    • 场景一
      • 思路
      • 效果
      • 核心实现
    • 场景二
      • 思路
      • 效果
      • 核心实现
  • 交互
    • 获取曲线在鼠标位置坐标
    • 图例控制序列隐藏/显示
    • 卡顿问题
  • 参考鸣谢

前言

这是一段做作的前言,摘自网络。
在Qt5.7之前,Qt Charts 一直是商业版才有,所以在此之前的Qt开发人员若想绘制图表需采用第三方库,常见的是Qt Charts是Qt提供的图表模块,在Qt5.7之前只有商业版才有,但是从Qt5.7之后,社区版本也包含了Qt Charts。Qt Charts可以很方便的绘制常见的折线图、柱状图、饼图等图表。它基于Qt的Graphics View架构,核心组件是QChartView和QChart。其中QChartView正是继承于QGraphicsView类,因此它也可以作为Graphics View中的视图组件。另一个QChart则由QGraphicsWidget继承而来,继续向上追溯,发现他们都继承于QGraphicsItem,所以QChart是图形项。

准备工作

安装QChart组件

Qt 安装时,默认情况下不安装 QCharts组件 ,所以如果需要使用 QCharts组件 ,我们需要先更新一下 Qt组件

首先在我们的 Qt安装路径 下找到 MaintenanceTool


若在下一步出现 “要继续此操作,至少需要一个有效且已启用的储存库。”;则需要在设置中设置存储库。

Qt 存储库(戳我)

ps:我采用的是清华镜像,只需点击HTTP 进入镜像地址并移动至图示目录下,复制如上图所示的 HTTP地址(点击此处偷懒) 作为存储库,随后添加:



项目配置

.pro文件中添加

QT    += charts

.h文件中添加

QT_CHARTS_USE_NAMESPACE

QCharts必须的头文件

#include <QChartView>
#include <QChart>

主要组成部分

Qt Charts 模块是一组易于使用的图标组件,基于 Qt 的 GrapHics View 架构,核心是 QChartViewQChart

QChartView

QChartViewQChart 的视图组件,用于显示。在 QtCreator 中使用 QChartView 可以放置一个 QWidget,然后升级为 QChartView

QChartView 的内容很少,建议直接过一遍文档 QChartView

QChartView继承关系如下:

#mermaid-svg-KrIufvFmCfUgWced .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-KrIufvFmCfUgWced .label text{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .node rect,#mermaid-svg-KrIufvFmCfUgWced .node circle,#mermaid-svg-KrIufvFmCfUgWced .node ellipse,#mermaid-svg-KrIufvFmCfUgWced .node polygon,#mermaid-svg-KrIufvFmCfUgWced .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-KrIufvFmCfUgWced .node .label{text-align:center;fill:#333}#mermaid-svg-KrIufvFmCfUgWced .node.clickable{cursor:pointer}#mermaid-svg-KrIufvFmCfUgWced .arrowheadPath{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-KrIufvFmCfUgWced .flowchart-link{stroke:#333;fill:none}#mermaid-svg-KrIufvFmCfUgWced .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-KrIufvFmCfUgWced .edgeLabel rect{opacity:0.9}#mermaid-svg-KrIufvFmCfUgWced .edgeLabel span{color:#333}#mermaid-svg-KrIufvFmCfUgWced .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-KrIufvFmCfUgWced .cluster text{fill:#333}#mermaid-svg-KrIufvFmCfUgWced div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-KrIufvFmCfUgWced .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-KrIufvFmCfUgWced text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-KrIufvFmCfUgWced .actor-line{stroke:grey}#mermaid-svg-KrIufvFmCfUgWced .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-KrIufvFmCfUgWced .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-KrIufvFmCfUgWced #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-KrIufvFmCfUgWced .sequenceNumber{fill:#fff}#mermaid-svg-KrIufvFmCfUgWced #sequencenumber{fill:#333}#mermaid-svg-KrIufvFmCfUgWced #crosshead path{fill:#333;stroke:#333}#mermaid-svg-KrIufvFmCfUgWced .messageText{fill:#333;stroke:#333}#mermaid-svg-KrIufvFmCfUgWced .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-KrIufvFmCfUgWced .labelText,#mermaid-svg-KrIufvFmCfUgWced .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-KrIufvFmCfUgWced .loopText,#mermaid-svg-KrIufvFmCfUgWced .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-KrIufvFmCfUgWced .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-KrIufvFmCfUgWced .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-KrIufvFmCfUgWced .noteText,#mermaid-svg-KrIufvFmCfUgWced .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-KrIufvFmCfUgWced .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-KrIufvFmCfUgWced .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-KrIufvFmCfUgWced .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-KrIufvFmCfUgWced .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .section{stroke:none;opacity:0.2}#mermaid-svg-KrIufvFmCfUgWced .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-KrIufvFmCfUgWced .section2{fill:#fff400}#mermaid-svg-KrIufvFmCfUgWced .section1,#mermaid-svg-KrIufvFmCfUgWced .section3{fill:#fff;opacity:0.2}#mermaid-svg-KrIufvFmCfUgWced .sectionTitle0{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .sectionTitle1{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .sectionTitle2{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .sectionTitle3{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-KrIufvFmCfUgWced .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .grid path{stroke-width:0}#mermaid-svg-KrIufvFmCfUgWced .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-KrIufvFmCfUgWced .task{stroke-width:2}#mermaid-svg-KrIufvFmCfUgWced .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .taskText:not([font-size]){font-size:11px}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-KrIufvFmCfUgWced .task.clickable{cursor:pointer}#mermaid-svg-KrIufvFmCfUgWced .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-KrIufvFmCfUgWced .taskText0,#mermaid-svg-KrIufvFmCfUgWced .taskText1,#mermaid-svg-KrIufvFmCfUgWced .taskText2,#mermaid-svg-KrIufvFmCfUgWced .taskText3{fill:#fff}#mermaid-svg-KrIufvFmCfUgWced .task0,#mermaid-svg-KrIufvFmCfUgWced .task1,#mermaid-svg-KrIufvFmCfUgWced .task2,#mermaid-svg-KrIufvFmCfUgWced .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutside0,#mermaid-svg-KrIufvFmCfUgWced .taskTextOutside2{fill:#000}#mermaid-svg-KrIufvFmCfUgWced .taskTextOutside1,#mermaid-svg-KrIufvFmCfUgWced .taskTextOutside3{fill:#000}#mermaid-svg-KrIufvFmCfUgWced .active0,#mermaid-svg-KrIufvFmCfUgWced .active1,#mermaid-svg-KrIufvFmCfUgWced .active2,#mermaid-svg-KrIufvFmCfUgWced .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-KrIufvFmCfUgWced .activeText0,#mermaid-svg-KrIufvFmCfUgWced .activeText1,#mermaid-svg-KrIufvFmCfUgWced .activeText2,#mermaid-svg-KrIufvFmCfUgWced .activeText3{fill:#000 !important}#mermaid-svg-KrIufvFmCfUgWced .done0,#mermaid-svg-KrIufvFmCfUgWced .done1,#mermaid-svg-KrIufvFmCfUgWced .done2,#mermaid-svg-KrIufvFmCfUgWced .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-KrIufvFmCfUgWced .doneText0,#mermaid-svg-KrIufvFmCfUgWced .doneText1,#mermaid-svg-KrIufvFmCfUgWced .doneText2,#mermaid-svg-KrIufvFmCfUgWced .doneText3{fill:#000 !important}#mermaid-svg-KrIufvFmCfUgWced .crit0,#mermaid-svg-KrIufvFmCfUgWced .crit1,#mermaid-svg-KrIufvFmCfUgWced .crit2,#mermaid-svg-KrIufvFmCfUgWced .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-KrIufvFmCfUgWced .activeCrit0,#mermaid-svg-KrIufvFmCfUgWced .activeCrit1,#mermaid-svg-KrIufvFmCfUgWced .activeCrit2,#mermaid-svg-KrIufvFmCfUgWced .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-KrIufvFmCfUgWced .doneCrit0,#mermaid-svg-KrIufvFmCfUgWced .doneCrit1,#mermaid-svg-KrIufvFmCfUgWced .doneCrit2,#mermaid-svg-KrIufvFmCfUgWced .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-KrIufvFmCfUgWced .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-KrIufvFmCfUgWced .milestoneText{font-style:italic}#mermaid-svg-KrIufvFmCfUgWced .doneCritText0,#mermaid-svg-KrIufvFmCfUgWced .doneCritText1,#mermaid-svg-KrIufvFmCfUgWced .doneCritText2,#mermaid-svg-KrIufvFmCfUgWced .doneCritText3{fill:#000 !important}#mermaid-svg-KrIufvFmCfUgWced .activeCritText0,#mermaid-svg-KrIufvFmCfUgWced .activeCritText1,#mermaid-svg-KrIufvFmCfUgWced .activeCritText2,#mermaid-svg-KrIufvFmCfUgWced .activeCritText3{fill:#000 !important}#mermaid-svg-KrIufvFmCfUgWced .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-KrIufvFmCfUgWced g.classGroup text .title{font-weight:bolder}#mermaid-svg-KrIufvFmCfUgWced g.clickable{cursor:pointer}#mermaid-svg-KrIufvFmCfUgWced g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-KrIufvFmCfUgWced g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-KrIufvFmCfUgWced .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-KrIufvFmCfUgWced .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-KrIufvFmCfUgWced .dashed-line{stroke-dasharray:3}#mermaid-svg-KrIufvFmCfUgWced #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced .commit-id,#mermaid-svg-KrIufvFmCfUgWced .commit-msg,#mermaid-svg-KrIufvFmCfUgWced .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-KrIufvFmCfUgWced g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-KrIufvFmCfUgWced g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-KrIufvFmCfUgWced g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-KrIufvFmCfUgWced g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-KrIufvFmCfUgWced .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-KrIufvFmCfUgWced .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-KrIufvFmCfUgWced .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-KrIufvFmCfUgWced .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-KrIufvFmCfUgWced .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-KrIufvFmCfUgWced .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-KrIufvFmCfUgWced .edgeLabel text{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-KrIufvFmCfUgWced .node circle.state-start{fill:black;stroke:black}#mermaid-svg-KrIufvFmCfUgWced .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-KrIufvFmCfUgWced #statediagram-barbEnd{fill:#9370db}#mermaid-svg-KrIufvFmCfUgWced .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-KrIufvFmCfUgWced .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-KrIufvFmCfUgWced .statediagram-state .divider{stroke:#9370db}#mermaid-svg-KrIufvFmCfUgWced .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-KrIufvFmCfUgWced .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-KrIufvFmCfUgWced .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-KrIufvFmCfUgWced .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-KrIufvFmCfUgWced .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-KrIufvFmCfUgWced .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-KrIufvFmCfUgWced .note-edge{stroke-dasharray:5}#mermaid-svg-KrIufvFmCfUgWced .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-KrIufvFmCfUgWced .error-icon{fill:#522}#mermaid-svg-KrIufvFmCfUgWced .error-text{fill:#522;stroke:#522}#mermaid-svg-KrIufvFmCfUgWced .edge-thickness-normal{stroke-width:2px}#mermaid-svg-KrIufvFmCfUgWced .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-KrIufvFmCfUgWced .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-KrIufvFmCfUgWced .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-KrIufvFmCfUgWced .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-KrIufvFmCfUgWced .marker{fill:#333}#mermaid-svg-KrIufvFmCfUgWced .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-KrIufvFmCfUgWced {color: rgba(0, 0, 0, 0.75);font: ;}

QWidget
QFrame
QGraphicsObject
QGraphicsView
QChartView

QChart

QChart 管理不同类型的序列和其他与图表相关的对象,例如坐标轴及图例。

QChart 继承关系如下:

#mermaid-svg-mJ3LNY2JK57YQUsQ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .label text{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .node rect,#mermaid-svg-mJ3LNY2JK57YQUsQ .node circle,#mermaid-svg-mJ3LNY2JK57YQUsQ .node ellipse,#mermaid-svg-mJ3LNY2JK57YQUsQ .node polygon,#mermaid-svg-mJ3LNY2JK57YQUsQ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-mJ3LNY2JK57YQUsQ .node .label{text-align:center;fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .node.clickable{cursor:pointer}#mermaid-svg-mJ3LNY2JK57YQUsQ .arrowheadPath{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-mJ3LNY2JK57YQUsQ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-mJ3LNY2JK57YQUsQ .edgeLabel rect{opacity:0.9}#mermaid-svg-mJ3LNY2JK57YQUsQ .edgeLabel span{color:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-mJ3LNY2JK57YQUsQ .cluster text{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-mJ3LNY2JK57YQUsQ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-mJ3LNY2JK57YQUsQ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .actor-line{stroke:grey}#mermaid-svg-mJ3LNY2JK57YQUsQ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .sequenceNumber{fill:#fff}#mermaid-svg-mJ3LNY2JK57YQUsQ #sequencenumber{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .messageText{fill:#333;stroke:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-mJ3LNY2JK57YQUsQ .labelText,#mermaid-svg-mJ3LNY2JK57YQUsQ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .loopText,#mermaid-svg-mJ3LNY2JK57YQUsQ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-mJ3LNY2JK57YQUsQ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-mJ3LNY2JK57YQUsQ .noteText,#mermaid-svg-mJ3LNY2JK57YQUsQ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-mJ3LNY2JK57YQUsQ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-mJ3LNY2JK57YQUsQ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-mJ3LNY2JK57YQUsQ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .section{stroke:none;opacity:0.2}#mermaid-svg-mJ3LNY2JK57YQUsQ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-mJ3LNY2JK57YQUsQ .section2{fill:#fff400}#mermaid-svg-mJ3LNY2JK57YQUsQ .section1,#mermaid-svg-mJ3LNY2JK57YQUsQ .section3{fill:#fff;opacity:0.2}#mermaid-svg-mJ3LNY2JK57YQUsQ .sectionTitle0{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .sectionTitle1{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .sectionTitle2{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .sectionTitle3{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-mJ3LNY2JK57YQUsQ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .grid path{stroke-width:0}#mermaid-svg-mJ3LNY2JK57YQUsQ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-mJ3LNY2JK57YQUsQ .task{stroke-width:2}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText:not([font-size]){font-size:11px}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-mJ3LNY2JK57YQUsQ .task.clickable{cursor:pointer}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText0,#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText1,#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText2,#mermaid-svg-mJ3LNY2JK57YQUsQ .taskText3{fill:#fff}#mermaid-svg-mJ3LNY2JK57YQUsQ .task0,#mermaid-svg-mJ3LNY2JK57YQUsQ .task1,#mermaid-svg-mJ3LNY2JK57YQUsQ .task2,#mermaid-svg-mJ3LNY2JK57YQUsQ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutside0,#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutside2{fill:#000}#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutside1,#mermaid-svg-mJ3LNY2JK57YQUsQ .taskTextOutside3{fill:#000}#mermaid-svg-mJ3LNY2JK57YQUsQ .active0,#mermaid-svg-mJ3LNY2JK57YQUsQ .active1,#mermaid-svg-mJ3LNY2JK57YQUsQ .active2,#mermaid-svg-mJ3LNY2JK57YQUsQ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-mJ3LNY2JK57YQUsQ .activeText0,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeText1,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeText2,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeText3{fill:#000 !important}#mermaid-svg-mJ3LNY2JK57YQUsQ .done0,#mermaid-svg-mJ3LNY2JK57YQUsQ .done1,#mermaid-svg-mJ3LNY2JK57YQUsQ .done2,#mermaid-svg-mJ3LNY2JK57YQUsQ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-mJ3LNY2JK57YQUsQ .doneText0,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneText1,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneText2,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneText3{fill:#000 !important}#mermaid-svg-mJ3LNY2JK57YQUsQ .crit0,#mermaid-svg-mJ3LNY2JK57YQUsQ .crit1,#mermaid-svg-mJ3LNY2JK57YQUsQ .crit2,#mermaid-svg-mJ3LNY2JK57YQUsQ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCrit0,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCrit1,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCrit2,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCrit0,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCrit1,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCrit2,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-mJ3LNY2JK57YQUsQ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-mJ3LNY2JK57YQUsQ .milestoneText{font-style:italic}#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCritText0,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCritText1,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCritText2,#mermaid-svg-mJ3LNY2JK57YQUsQ .doneCritText3{fill:#000 !important}#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCritText0,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCritText1,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCritText2,#mermaid-svg-mJ3LNY2JK57YQUsQ .activeCritText3{fill:#000 !important}#mermaid-svg-mJ3LNY2JK57YQUsQ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-mJ3LNY2JK57YQUsQ g.classGroup text .title{font-weight:bolder}#mermaid-svg-mJ3LNY2JK57YQUsQ g.clickable{cursor:pointer}#mermaid-svg-mJ3LNY2JK57YQUsQ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-mJ3LNY2JK57YQUsQ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-mJ3LNY2JK57YQUsQ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-mJ3LNY2JK57YQUsQ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .dashed-line{stroke-dasharray:3}#mermaid-svg-mJ3LNY2JK57YQUsQ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ .commit-id,#mermaid-svg-mJ3LNY2JK57YQUsQ .commit-msg,#mermaid-svg-mJ3LNY2JK57YQUsQ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-mJ3LNY2JK57YQUsQ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-mJ3LNY2JK57YQUsQ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-mJ3LNY2JK57YQUsQ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-mJ3LNY2JK57YQUsQ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-mJ3LNY2JK57YQUsQ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-mJ3LNY2JK57YQUsQ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-mJ3LNY2JK57YQUsQ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-mJ3LNY2JK57YQUsQ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-mJ3LNY2JK57YQUsQ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-mJ3LNY2JK57YQUsQ .edgeLabel text{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-mJ3LNY2JK57YQUsQ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-mJ3LNY2JK57YQUsQ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-mJ3LNY2JK57YQUsQ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-mJ3LNY2JK57YQUsQ .note-edge{stroke-dasharray:5}#mermaid-svg-mJ3LNY2JK57YQUsQ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-mJ3LNY2JK57YQUsQ .error-icon{fill:#522}#mermaid-svg-mJ3LNY2JK57YQUsQ .error-text{fill:#522;stroke:#522}#mermaid-svg-mJ3LNY2JK57YQUsQ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-mJ3LNY2JK57YQUsQ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-mJ3LNY2JK57YQUsQ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-mJ3LNY2JK57YQUsQ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-mJ3LNY2JK57YQUsQ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-mJ3LNY2JK57YQUsQ .marker{fill:#333}#mermaid-svg-mJ3LNY2JK57YQUsQ .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-mJ3LNY2JK57YQUsQ {color: rgba(0, 0, 0, 0.75);font: ;}

QObject
QGraphicsObject
QGraphicsItem
QGraphicsWidget
QGraphicsItem
QChart

序列

常见的序列如下:

  • QBarSeries (柱状图)

  • QHorizontalBarSeries (水平柱状图)

  • QHorizontalPercentBarSeries (水平百分比柱状图)

  • QHorizontalStackedBarSeries (水平层叠图)

  • QPercentBarSeries 百分比柱状图)QStackedBarSeries (层叠图/堆叠的条形图)

  • QAreaSeries (面积图)

  • QBoxPlotSeries (形图/盒须图)

  • QPieSeries (饼图)

  • QXYSeries (线性图、曲线图、散点图的基类)

  • QLineSeries (折线图)

  • QSplineSeries (曲线图)

  • QScatterSeries (散点图)

序列继承关系如下:

#mermaid-svg-Ey0KtEKRaVUOdNw5 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .label text{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .node rect,#mermaid-svg-Ey0KtEKRaVUOdNw5 .node circle,#mermaid-svg-Ey0KtEKRaVUOdNw5 .node ellipse,#mermaid-svg-Ey0KtEKRaVUOdNw5 .node polygon,#mermaid-svg-Ey0KtEKRaVUOdNw5 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .node .label{text-align:center;fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .node.clickable{cursor:pointer}#mermaid-svg-Ey0KtEKRaVUOdNw5 .arrowheadPath{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edgeLabel rect{opacity:0.9}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edgeLabel span{color:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .cluster text{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Ey0KtEKRaVUOdNw5 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Ey0KtEKRaVUOdNw5 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .actor-line{stroke:grey}#mermaid-svg-Ey0KtEKRaVUOdNw5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sequenceNumber{fill:#fff}#mermaid-svg-Ey0KtEKRaVUOdNw5 #sequencenumber{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .messageText{fill:#333;stroke:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Ey0KtEKRaVUOdNw5 .labelText,#mermaid-svg-Ey0KtEKRaVUOdNw5 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .loopText,#mermaid-svg-Ey0KtEKRaVUOdNw5 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Ey0KtEKRaVUOdNw5 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Ey0KtEKRaVUOdNw5 .noteText,#mermaid-svg-Ey0KtEKRaVUOdNw5 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ey0KtEKRaVUOdNw5 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .section{stroke:none;opacity:0.2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .section2{fill:#fff400}#mermaid-svg-Ey0KtEKRaVUOdNw5 .section1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .section3{fill:#fff;opacity:0.2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sectionTitle0{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sectionTitle1{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sectionTitle2{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sectionTitle3{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Ey0KtEKRaVUOdNw5 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .grid path{stroke-width:0}#mermaid-svg-Ey0KtEKRaVUOdNw5 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .task{stroke-width:2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText:not([font-size]){font-size:11px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .task.clickable{cursor:pointer}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskText3{fill:#fff}#mermaid-svg-Ey0KtEKRaVUOdNw5 .task0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .task1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .task2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutside0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutside2{fill:#000}#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutside1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .taskTextOutside3{fill:#000}#mermaid-svg-Ey0KtEKRaVUOdNw5 .active0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .active1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .active2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeText0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeText1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeText2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeText3{fill:#000 !important}#mermaid-svg-Ey0KtEKRaVUOdNw5 .done0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .done1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .done2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneText0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneText1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneText2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneText3{fill:#000 !important}#mermaid-svg-Ey0KtEKRaVUOdNw5 .crit0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .crit1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .crit2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCrit0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCrit1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCrit2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCrit0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCrit1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCrit2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Ey0KtEKRaVUOdNw5 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .milestoneText{font-style:italic}#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCritText0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCritText1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCritText2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .doneCritText3{fill:#000 !important}#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCritText0,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCritText1,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCritText2,#mermaid-svg-Ey0KtEKRaVUOdNw5 .activeCritText3{fill:#000 !important}#mermaid-svg-Ey0KtEKRaVUOdNw5 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.classGroup text .title{font-weight:bolder}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.clickable{cursor:pointer}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Ey0KtEKRaVUOdNw5 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .dashed-line{stroke-dasharray:3}#mermaid-svg-Ey0KtEKRaVUOdNw5 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 .commit-id,#mermaid-svg-Ey0KtEKRaVUOdNw5 .commit-msg,#mermaid-svg-Ey0KtEKRaVUOdNw5 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Ey0KtEKRaVUOdNw5 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Ey0KtEKRaVUOdNw5 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Ey0KtEKRaVUOdNw5 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Ey0KtEKRaVUOdNw5 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edgeLabel text{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ey0KtEKRaVUOdNw5 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Ey0KtEKRaVUOdNw5 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Ey0KtEKRaVUOdNw5 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Ey0KtEKRaVUOdNw5 .note-edge{stroke-dasharray:5}#mermaid-svg-Ey0KtEKRaVUOdNw5 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Ey0KtEKRaVUOdNw5 .error-icon{fill:#522}#mermaid-svg-Ey0KtEKRaVUOdNw5 .error-text{fill:#522;stroke:#522}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Ey0KtEKRaVUOdNw5 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Ey0KtEKRaVUOdNw5 .marker{fill:#333}#mermaid-svg-Ey0KtEKRaVUOdNw5 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-Ey0KtEKRaVUOdNw5 {color: rgba(0, 0, 0, 0.75);font: ;}

QAbstractSeries
QBoxPlotSeries
QAreaSeries
QAbstractBarSeries
QCandlestickSeries
QPieSeries
QXYSeries
QBarSeries
QHorizontalBarSeries
QHorizontalPercentBarSeries
QHorizontalStackedBarSeries
QPercentBarSeries
QStackedBarSeries
QLineSeries
QScatterSeries
QSplineSeries

本文仅介绍最常用的 QLineSeries

坐标轴

坐标轴封装了刻度,标签,网格线,标题等属性。

坐标轴有以下几种:

  • QBarCategoryAxis
    类别坐标轴,用字符串作为坐标轴的可读,用于图表的非数值坐标轴
  • QDateTimeAxis
    时间坐标轴,用作时间数据的坐标轴
  • QLogValueAxis
    对数数值坐标轴,作为数值类数据的对数坐标轴
  • QValueAxis
    数值坐标轴,用作数值型数据的坐标轴
  • QCategoryAxis
    分组数值坐标轴,可以为数值范围设置标签

坐标轴继承关系如下:

#mermaid-svg-yElexF9pUG0gUvI9 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-yElexF9pUG0gUvI9 .label text{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .node rect,#mermaid-svg-yElexF9pUG0gUvI9 .node circle,#mermaid-svg-yElexF9pUG0gUvI9 .node ellipse,#mermaid-svg-yElexF9pUG0gUvI9 .node polygon,#mermaid-svg-yElexF9pUG0gUvI9 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yElexF9pUG0gUvI9 .node .label{text-align:center;fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .node.clickable{cursor:pointer}#mermaid-svg-yElexF9pUG0gUvI9 .arrowheadPath{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-yElexF9pUG0gUvI9 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-yElexF9pUG0gUvI9 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-yElexF9pUG0gUvI9 .edgeLabel rect{opacity:0.9}#mermaid-svg-yElexF9pUG0gUvI9 .edgeLabel span{color:#333}#mermaid-svg-yElexF9pUG0gUvI9 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-yElexF9pUG0gUvI9 .cluster text{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-yElexF9pUG0gUvI9 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yElexF9pUG0gUvI9 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-yElexF9pUG0gUvI9 .actor-line{stroke:grey}#mermaid-svg-yElexF9pUG0gUvI9 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-yElexF9pUG0gUvI9 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-yElexF9pUG0gUvI9 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-yElexF9pUG0gUvI9 .sequenceNumber{fill:#fff}#mermaid-svg-yElexF9pUG0gUvI9 #sequencenumber{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-yElexF9pUG0gUvI9 .messageText{fill:#333;stroke:#333}#mermaid-svg-yElexF9pUG0gUvI9 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yElexF9pUG0gUvI9 .labelText,#mermaid-svg-yElexF9pUG0gUvI9 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-yElexF9pUG0gUvI9 .loopText,#mermaid-svg-yElexF9pUG0gUvI9 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-yElexF9pUG0gUvI9 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-yElexF9pUG0gUvI9 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yElexF9pUG0gUvI9 .noteText,#mermaid-svg-yElexF9pUG0gUvI9 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-yElexF9pUG0gUvI9 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-yElexF9pUG0gUvI9 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-yElexF9pUG0gUvI9 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-yElexF9pUG0gUvI9 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .section{stroke:none;opacity:0.2}#mermaid-svg-yElexF9pUG0gUvI9 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-yElexF9pUG0gUvI9 .section2{fill:#fff400}#mermaid-svg-yElexF9pUG0gUvI9 .section1,#mermaid-svg-yElexF9pUG0gUvI9 .section3{fill:#fff;opacity:0.2}#mermaid-svg-yElexF9pUG0gUvI9 .sectionTitle0{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .sectionTitle1{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .sectionTitle2{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .sectionTitle3{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-yElexF9pUG0gUvI9 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .grid path{stroke-width:0}#mermaid-svg-yElexF9pUG0gUvI9 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-yElexF9pUG0gUvI9 .task{stroke-width:2}#mermaid-svg-yElexF9pUG0gUvI9 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .taskText:not([font-size]){font-size:11px}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-yElexF9pUG0gUvI9 .task.clickable{cursor:pointer}#mermaid-svg-yElexF9pUG0gUvI9 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yElexF9pUG0gUvI9 .taskText0,#mermaid-svg-yElexF9pUG0gUvI9 .taskText1,#mermaid-svg-yElexF9pUG0gUvI9 .taskText2,#mermaid-svg-yElexF9pUG0gUvI9 .taskText3{fill:#fff}#mermaid-svg-yElexF9pUG0gUvI9 .task0,#mermaid-svg-yElexF9pUG0gUvI9 .task1,#mermaid-svg-yElexF9pUG0gUvI9 .task2,#mermaid-svg-yElexF9pUG0gUvI9 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutside0,#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutside2{fill:#000}#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutside1,#mermaid-svg-yElexF9pUG0gUvI9 .taskTextOutside3{fill:#000}#mermaid-svg-yElexF9pUG0gUvI9 .active0,#mermaid-svg-yElexF9pUG0gUvI9 .active1,#mermaid-svg-yElexF9pUG0gUvI9 .active2,#mermaid-svg-yElexF9pUG0gUvI9 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-yElexF9pUG0gUvI9 .activeText0,#mermaid-svg-yElexF9pUG0gUvI9 .activeText1,#mermaid-svg-yElexF9pUG0gUvI9 .activeText2,#mermaid-svg-yElexF9pUG0gUvI9 .activeText3{fill:#000 !important}#mermaid-svg-yElexF9pUG0gUvI9 .done0,#mermaid-svg-yElexF9pUG0gUvI9 .done1,#mermaid-svg-yElexF9pUG0gUvI9 .done2,#mermaid-svg-yElexF9pUG0gUvI9 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-yElexF9pUG0gUvI9 .doneText0,#mermaid-svg-yElexF9pUG0gUvI9 .doneText1,#mermaid-svg-yElexF9pUG0gUvI9 .doneText2,#mermaid-svg-yElexF9pUG0gUvI9 .doneText3{fill:#000 !important}#mermaid-svg-yElexF9pUG0gUvI9 .crit0,#mermaid-svg-yElexF9pUG0gUvI9 .crit1,#mermaid-svg-yElexF9pUG0gUvI9 .crit2,#mermaid-svg-yElexF9pUG0gUvI9 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-yElexF9pUG0gUvI9 .activeCrit0,#mermaid-svg-yElexF9pUG0gUvI9 .activeCrit1,#mermaid-svg-yElexF9pUG0gUvI9 .activeCrit2,#mermaid-svg-yElexF9pUG0gUvI9 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-yElexF9pUG0gUvI9 .doneCrit0,#mermaid-svg-yElexF9pUG0gUvI9 .doneCrit1,#mermaid-svg-yElexF9pUG0gUvI9 .doneCrit2,#mermaid-svg-yElexF9pUG0gUvI9 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-yElexF9pUG0gUvI9 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-yElexF9pUG0gUvI9 .milestoneText{font-style:italic}#mermaid-svg-yElexF9pUG0gUvI9 .doneCritText0,#mermaid-svg-yElexF9pUG0gUvI9 .doneCritText1,#mermaid-svg-yElexF9pUG0gUvI9 .doneCritText2,#mermaid-svg-yElexF9pUG0gUvI9 .doneCritText3{fill:#000 !important}#mermaid-svg-yElexF9pUG0gUvI9 .activeCritText0,#mermaid-svg-yElexF9pUG0gUvI9 .activeCritText1,#mermaid-svg-yElexF9pUG0gUvI9 .activeCritText2,#mermaid-svg-yElexF9pUG0gUvI9 .activeCritText3{fill:#000 !important}#mermaid-svg-yElexF9pUG0gUvI9 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-yElexF9pUG0gUvI9 g.classGroup text .title{font-weight:bolder}#mermaid-svg-yElexF9pUG0gUvI9 g.clickable{cursor:pointer}#mermaid-svg-yElexF9pUG0gUvI9 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yElexF9pUG0gUvI9 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-yElexF9pUG0gUvI9 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-yElexF9pUG0gUvI9 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yElexF9pUG0gUvI9 .dashed-line{stroke-dasharray:3}#mermaid-svg-yElexF9pUG0gUvI9 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 .commit-id,#mermaid-svg-yElexF9pUG0gUvI9 .commit-msg,#mermaid-svg-yElexF9pUG0gUvI9 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-yElexF9pUG0gUvI9 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-yElexF9pUG0gUvI9 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yElexF9pUG0gUvI9 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yElexF9pUG0gUvI9 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yElexF9pUG0gUvI9 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-yElexF9pUG0gUvI9 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-yElexF9pUG0gUvI9 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yElexF9pUG0gUvI9 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-yElexF9pUG0gUvI9 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-yElexF9pUG0gUvI9 .edgeLabel text{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yElexF9pUG0gUvI9 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-yElexF9pUG0gUvI9 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-yElexF9pUG0gUvI9 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-yElexF9pUG0gUvI9 .note-edge{stroke-dasharray:5}#mermaid-svg-yElexF9pUG0gUvI9 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-yElexF9pUG0gUvI9 .error-icon{fill:#522}#mermaid-svg-yElexF9pUG0gUvI9 .error-text{fill:#522;stroke:#522}#mermaid-svg-yElexF9pUG0gUvI9 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-yElexF9pUG0gUvI9 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-yElexF9pUG0gUvI9 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-yElexF9pUG0gUvI9 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-yElexF9pUG0gUvI9 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-yElexF9pUG0gUvI9 .marker{fill:#333}#mermaid-svg-yElexF9pUG0gUvI9 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-yElexF9pUG0gUvI9 {color: rgba(0, 0, 0, 0.75);font: ;}

AbstractAxis
QBarCategoryAxis
QDateTimeAxis
QLogValueAxis
QValueAxis
QCategoryAxis

图例

图例是对图表上序列的补充说明。我们可以设置序列颜色及其文字说明、并控制序列显示的位置。

此外,图例中还有一个 QLegendMarker 类,可为每个序列的图例生成一个类似QChrckedBox 的组件;单击序列的标记,可以控制序列是否显示。

下面是官方例程 chartthemes 的运行效果。


上述内容,建议通过官方例程配合类文档学习。

静态图表

源代码

    chart = new QChart();mAxY = new QValueAxis();mAxX = new QValueAxis();mLineSeries = new QLineSeries();//y轴范围mAxY->setRange(0, 10);// Y轴分等份mAxY->setTickCount(11);mAxX->setRange(0,10);mAxX->setTickCount(11);// 将系列添加到图表chart->addSeries(mLineSeries);chart->setTheme(QtCharts::QChart::ChartThemeBrownSand);mAxX->setTitleText(QString(tr("ImageNumber")));mAxY->setTitleText(QString(tr("ReadRate(%)")));chart->addAxis(mAxY, Qt::AlignLeft);chart->addAxis(mAxX, Qt::AlignBottom);mLineSeries->attachAxis(mAxY);mLineSeries->attachAxis(mAxX);//隐藏背景chart->setBackgroundVisible(false);//设置外边界全部为0chart->setContentsMargins(0, 0, 0, 0);//设置内边界全部为0chart->setMargins(QMargins(0, 0, 0, 0));//设置背景区域无圆角chart->setBackgroundRoundness(0);//突出曲线上的点mLineSeries->setPointsVisible(true);//图例QLegend *mlegend = chart->legend();mLineSeries->setName("testname");mLineSeries->setColor(QColor(255,0,0));//在底部显示mlegend->setAlignment(Qt::AlignBottom);mlegend->show();// 将图表绑定到视图 wiget 为 QChartViewui->widget->setChart(chart);for(int i = 0 ;i < 10;i++){mLineSeries->append(i+1, i);}

动态图表

场景一

显示最近的 n 个数据。

思路

对于数值坐标轴,我们仅需要在加入数据时判断数据点是否超过 x轴 最大值。
若超过则取得旧的pointslist,并将其所有点的 x轴 数值 -1 ,再加入新点。

效果

核心实现

    QList<QPointF> oldPoints = mLineSeries->points();int pointCount =oldPoints.size();if(pointCount > mAxX->max()){QList<QPointF> newPoints;for(int i = 0; i < pointCount; i++){QPointF point;point.setX(oldPoints.at(i).x()-1);point.setY(oldPoints.at(i).y());newPoints.append(point);}qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));QPointF point;point.setX(oldPoints.at(pointCount -1).x());point.setY(qrand()%10);newPoints.append(point);mLineSeries->clear();mLineSeries->append(newPoints);mLineSeries->setPointsVisible(true);}else{qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));QPointF point;point.setX(oldPoints.at(pointCount -1).x() +1);point.setY(qrand()%10);mLineSeries->append(point);}

场景二

显示最近一段时间的数据。

思路

这里需要增加两个概念

  • 定时间隔 TimerBreaks
  • 最大采样数 MaxSize

首次添加时设置时间轴,每次添加数据点都先判断当前数据点是否超过最大采样数,若超过则删除线中第一个点,再添加数据。

效果

核心实现

// 最大采样数
const int MaxSize = 100;
// 定时时间间隔-ms
const int TimerBreaks = 10;void MainWindow::slot_timeout()
{static int cnt = 0;static QDateTime BeginTime, EndTime;if (cnt == 0){BeginTime = QDateTime::currentDateTime();EndTime = BeginTime.addMSecs(MaxSize*(TimerBreaks + 1));mAxDateX->setMin(BeginTime);mAxDateX->setMax(EndTime);}qint64 x1 = QDateTime::currentMSecsSinceEpoch();qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));qreal y =qrand()%10;cnt = cnt > (MaxSize - 1) ? 1 : (++cnt);if (mLineSeries->count() > (MaxSize-1)){//删除第一个元素mLineSeries->removePoints(0, 1);EndTime = QDateTime::currentDateTime();BeginTime = EndTime.addMSecs((qint64)MaxSize*(-1)*TimerBreaks);mAxDateX->setMin(BeginTime);mAxDateX->setMax(EndTime);}mLineSeries->append(x1, y);}

交互

获取曲线在鼠标位置坐标

QXYSeries 中可以发现该信号:

  • void clicked(const QPointF &point)
    鼠标点击序列时,触发该信号

  • void hovered(const QPointF &point, bool state)
    鼠标在序列上时触发该信号

有了这两个信号,就可以很容易的实现以下功能:


以上效果来自 Qt 官方例程 - Callout,核心是通过这两个信号实现控件的动态创建、隐藏和显示。

图例控制序列隐藏/显示

可参考官方例程 legendmarkers


以下为摘录核心:


const auto markers = m_chart->legend()->markers();
for (QLegendMarker *marker : markers) {// Disconnect possible existing connection to avoid multiple connectionsQObject::disconnect(marker, &QLegendMarker::clicked, this ,&MainWidget::handleMarkerClicked);
QObject::connect(marker, &QLegendMarker::clicked, this, &MainWidget::handleMarkerClicked);//点击事件
void MainWidget::handleMarkerClicked()
{QLegendMarker* marker = qobject_cast<QLegendMarker*> (sender());//断言Q_ASSERT(marker);switch (marker->type()){case QLegendMarker::LegendMarkerTypeXY:{//控序列隐藏/显示// Toggle visibility of seriesmarker->series()->setVisible(!marker->series()->isVisible());// Turn legend marker back to visible, since hiding series also hides the marker// and we don't want it to happen now.marker->setVisible(true);//修改图例// Dim the marker, if series is not visibleqreal alpha = 1.0;if (!marker->series()->isVisible())alpha = 0.5;QColor color;QBrush brush = marker->labelBrush();color = brush.color();color.setAlphaF(alpha);brush.setColor(color);marker->setLabelBrush(brush);brush = marker->brush();color = brush.color();color.setAlphaF(alpha);brush.setColor(color);marker->setBrush(brush);QPen pen = marker->pen();color = pen.color();color.setAlphaF(alpha);pen.setColor(color);marker->setPen(pen);break;}default:{qDebug() << "Unknown marker type";break;}}
}

卡顿问题

在使用图表时,经常会遇到卡顿的问题。

目前总结的解决卡顿的方法主要有:

  • 去掉动画、样式、标签形状等
m_chart->setAnimationOptions(QChart::NoAnimation);
  • 开启 OPenGL 加速
line->setUseOpenGL();

值得注意的是:

  • QAreaSeries 面积和散点图无法使用。
  • 加速系列不支持系列动画。
  • 加速序列不支持点标签。
  • 对于加速系列,笔样式和标记形状被忽略。仅支持实线和普通散点。散点可以是圆形或矩形,这取决于底层图形硬件和驱动程序。
  • 极坐标图不支持加速序列。
  • 避免短时间内逐点添加,大数据刷新采用 append(const QList<QPointF> &points)
 line->append(newPoints);

参考鸣谢

Qt Charts Examples

QChart时间坐标轴实时更新数据

Qt - QTChart绘制图表相关推荐

  1. qt +ChartDirector 绘制图表

    自从开发由c#转入Qt后一直寻找一款Qt下的图形控件库,最后ChartDirector控件映入眼球.ChartDirector控件使用方便,快捷,灵活,功能强大,交互性强.在web服务器以及嵌入式应用 ...

  2. Qt:QtCharts绘制图表实时采集温度

    目录 Qt Charts介绍 视图-QChartView 图表-QChart 系列-QAbstractSeries 坐标轴-QAbstractAxis 图例-Legend 创建GUI界面 界面布局 完 ...

  3. QT实现在图表顶部绘制一个附加元素(标注)

    QT实现在图表顶部绘制一个附加元素 项目简介 项目技术 项目展示 主要源码片段解析 获取完整项目源码传送门 项目简介 在图表顶部绘制一个附加元素(标注). 项目技术 qt5.12,qtchart模块, ...

  4. python日常记账本源代码,基于PySide6,支持快速查询、绘制图表

    python日常记账本源代码,基于PySide6(Qt for Python 6)的账本,界面简洁.功能强大,支持保存文件.快速查询.绘制图表等,是平时记账的不错选择.账目查询.账本编辑.添加/删除. ...

  5. matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等

    matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...

  6. 用python绘制柱状图标题-使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  7. python能绘制统计图吗-使用Python绘制图表大全总结

    在使用Python绘制图表前,我们需要先安装两个库文件numpy和matplotlib. Numpy是Python开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效:mat ...

  8. [codeigniter]CI中使用pChart绘制图表,已测通过

    因为一个codeigniter开发的项目上要用到图表.FusionChart是flash技术,在某些情况下可能造成无法使用(如ipad).因此不禁想起了之前用Pchart做的图表项目. 但是毕竟是在C ...

  9. 如何在ASP.NET中用OWC绘制图表

    一.概述  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />   ...

最新文章

  1. linux下date -d,linux date -d的一些用法
  2. java存储整数_关于数组:Java:存储大量整数的最佳数据类型是什么?
  3. fastText原理和文本分类实战
  4. 孤儿进程和僵死进程处理方法
  5. HDU-4604 Deque DP
  6. 监测利器cacti服务安装
  7. C语言sendto()函数:经socket传送数据
  8. Leetcode | Implement strStr()
  9. storm能不能测试wadl_测试网红燃油宝到底能不能除积碳,看完不花冤枉钱
  10. Dart入门—函数与运算符
  11. 从最近的AAAI和EMNLP中了解命名实体识别与关系抽取的联合建模
  12. 转:Ajax与CustomErrors的尴尬
  13. 《线性代数及其应用》看完
  14. 计算机自带的画图软件工具介绍,电脑自带画图软件
  15. 全国区号省份mysql_中国各个省份的区号
  16. 微博技术架构分析和设计
  17. 1.488Mpps是如何计算出来的?
  18. 此图片来自微信公众平台 未经允许不可引用
  19. (域名解析过程)web请求过程全解析一
  20. 随机排列与八卦太极的联系

热门文章

  1. linux安装百度网盘rpm,Deepin、Ubuntu下安装百度网盘baidunetdisk_linux_2.0.1.rpm的方法
  2. 基于YOLO目标检测及OpenCV实现的游戏代玩人工智能体(Auto Gaming Agent) [4]
  3. 你已经是智能机器人,该上岗新基建了
  4. WideResNet(宽残差网络)介绍与代码
  5. The superclass javax.servlet.http.HttpServlet was not found on the Java Build Path类似问题简单解决方案
  6. 【golang】处理jpeg图片压缩后方向发生变化问题
  7. 一文带你了解typeScript
  8. 互联网医疗的定义及架构
  9. 不懂年轻人,还怎么带团队
  10. Ubuntu16.04 安装Pangolin出现错误,已解决(亲测成功)