https://www.qcustomplot.com/documentation/index.html
如果您是QCustomPlot的新手,并且只想开始使用它,建议您查看以下位置的教程和示例
当您熟悉使用QCustomPlot进行数据可视化的基础知识并且希望了解有关特定功能或更多高级概念的更多信息时,本文档对于作为参考特别有用。请参阅类概述,以获得解释QCustomPlot库最重要的类之间的关系的图。
绘图表
绘图表是在QCustomPlot中显示任何类型数据的类。它们都继承自QCPAbstractPlottable。例如,QCPGraph是一个绘图表,它显示具有不同线型,散布样式,填充等的图形。
由于绘制图形是一个主要的用例,因此QCustomPlot具有用于处理QCPGraph图形表的特殊接口,这使得处理它们非常容易:
可以使用QCustomPlot :: addGraph创建一个新图形,并使用QCustomPlot :: graph进行访问。
对于所有其他绘图表,使用常规的绘图表接口:首先,创建各个绘图表的实例并将其添加到QCustomPlot中,例如
QCPCurve *newCurve = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
newCurve
指针访问新创建的绘图表的属性。
可以通过QCustomPlot :: plottable检索出绘图表(包括图形)。由于该函数的返回类型是所有绘图表的抽象基类QCPAbstractPlottable,因此您可能希望qobject_cast
将返回的指针指向各自的绘图表子类。像往常一样,如果绘图表不是该特定子类的类型转换,则返回零。
与绘图表的所有其他接口(例如,如何设置数据)都特定于绘图表类型。请参阅以下子类的文档:QCPGraph,QCPCurve,QCPBars,QCPStatisticalBox,QCPColorMap和QCPFinancial。
控制轴
QCustomPlot具有四个默认轴:xAxis(底部),yAxis(左侧),xAxis2(顶部),yAxis2(右侧)。
它们的范围由QCPRange类处理,该类基本上保留了上下轴坐标。您可以使用QCPAxis :: setRange函数设置范围。要将轴比例类型从线性比例更改为对数比例,请将QCPAxis :: setScaleType设置为QCPAxis :: stLogarithmic。在这种情况下,您还需要对数分隔的刻度和刻度标签,因此将QCPAxis :: setTicker的轴刻度设置为QCPAxisTickerLog实例。
可以使用QCPAxis :: setLabel为每个轴分配一个轴标签(例如,“电压(mV)”)。
默认情况下,轴会以自动方式创建并标记刻度线。请参见QCPAxis文档的各种方法进行微调。可以通过QCPAxis :: setTicks禁用轴的刻度。如果只希望隐藏刻度标签(数字),请使用QCPAxis :: setTickLabels。请注意,默认的右轴和上轴以隐藏的刻度标签开始。
轴骨架到相应视口/窗口小部件边界的距离称为其边距。通常,页边距会自动计算以适合轴和刻度线标签。要更改此设置,请将QCPAxisRect :: setAutoMargins设置为排除相应的边距边,然后使用QCPAxisRect :: setMargins手动设置边距。可以使用QCustomPlot :: axisRect()访问主轴rect 。QCPAxisRect和QCPAxis文档中提供了有关不同边距/填充/偏移量选项的详细说明。
剧情图例
默认情况下,每个QCustomPlot都有一个QCPLegend(作为QCustomPlot :: legend)。图例是绘图内的一个小布局元素,其中列出了绘图表,并带有绘图表行/符号的图标和名称(QCPAbstractPlottable :: setName)。可以通过QCPAbstractPlottable :: addToLegend和QCPAbstractPlottable :: removeFromLegend从图例中添加和删除图表。默认情况下,将绘图表添加到QCustomPlot也会自动将其添加到图例。可以使用QCustomPlot :: setAutoAddPlottableToLegend属性更改此行为。
QCPLegend也提供了直接访问,添加和删除图例项的界面。例如,请参见QCPLegend :: item,QCPLegend :: itemWithPlottable,QCPLegend :: addItem,QCPLegend :: removeItem。
通过布局系统支持多个图例(因为QCPLegend是常规布局元素)。
用户互动
QCustomPlot支持使用鼠标(QCPAxisRect :: setRangeDrag)拖动轴范围,使用鼠标滚轮(QCPAxisRect :: setRangeZoom)缩放轴范围以及完整的选择机制,该机制具有可配置的粒度,可精确到数据点和数据范围。
这些交互的可用性由QCustomPlot :: setInteractions控制。有关交互系统的详细信息,请参见此处的文档。在专用的“数据选择机制”页面上详细讨论了数据选择。
此外,当单击或双击对象时,QCustomPlot始终会发出相应的信号。例如,请参见QCustomPlot :: plottableClick,QCustomPlot :: plottableDoubleClick和QCustomPlot :: axisClick。
最后,在最低级别上,您可以在自己的子类中使用QCPLayerable鼠标事件虚拟方法,QCustomPlot实例在受影响的可分层对象上调用这些方法。
装饰品及辅助物品
除绘图表外,还有另一类重要的绘图对象:项目。所有项目的基类是QCPAbstractItem。一个项目将自己与绘图表区分开来,因为它不一定要绑定到任何轴。这意味着它也可以定位在绝对像素坐标中或放置在轴rect上的相对位置上。此外,它通常不直接表示数据,而是用作修饰,强调,描述等。
可以在父子层次结构中安排多个项目,以实现动态行为。例如,您可以将箭头的头部放置在固定的绘图坐标上,因此它始终指向绘图中的某个重要区域。箭头的尾巴可以锚定到文本项,该文本项始终位于轴rect的顶部中心,而与用户拖动轴范围的位置无关。这样,箭头会伸展和旋转,因此它始终从标签指向指定的绘图坐标,而无需任何其他代码。
有关更详细的介绍,请参见QCPAbstractItem文档,然后从中查看各个标准项目的文档,以了解如何使用它们。
布局元素和布局
QCustomPlot使用内部布局系统来提供对象的动态大小调整和定位,例如轴矩形,图例,色标和其他布局元素。它们全部基于QCPLayoutElement,并且通过将它们放置在QCPLayout子类(如QCPLayoutGrid)中进行排列。
有关详细信息,请参见有关布局系统的页面。
OpenGL加速绘图和性能改进
QCustomPlot具有多个OpenGL后端,可在所有受支持的Qt版本中提供OpenGL硬件加速绘图。如果计算机支持OpenGL,则可以通过在相应的QCustomPlot实例上进行编译QCUSTOMPLOT_USE_OPENGL
并仅调用setOpenGl(true)来启用它。该方法的文档中提供了更多详细信息。
可在有关“绘图性能改进”的专用页面上找到有关为要求苛刻的可视化任务最大化绘图性能的信息。
预处理器定义标志
QCustomPlot理解一些预处理器定义,这些定义对于调试和编译很有用。必须在包含QCustomPlot标头之前定义这些标志。通常,最好使用以下命令将它们添加到您的qmake项目文件中DEFINES += QCUSTOMPLOT_USE_OPENGL
QCUSTOMPLOT_USE_OPENGL
如果定义了此标志,则QCustomPlot可以使用OpenGL来提高图形要求的绘图的绘图性能,请参见QCustomPlot :: setOpenGl。
QCUSTOMPLOT_COMPILE_LIBRARY
将QCustomPlot编译为共享库(.so / .dll)时定义此标志
QCUSTOMPLOT_USE_LIBRARY
使用QCustomPlot作为共享库时,在包含标题之前定义此标志
QCUSTOMPLOT_CHECK_DATA
如果定义了此标志,则QCustomPlot绘图表将在每次重绘时执行数据有效性检查。当遇到inf或nan值时(也有意使用无声NaN在图形中创建间隙),它们将提供qDebug输出。
将QCustomPlot与特殊的Qt标志一起使用
看到页面的特殊的Qt标志,如果你的项目使用QT_NO_CAST_FROM_ASCII
,QT_NO_CAST_TO_ASCII
或QT_NO_KEYWORDS
。