QTCustomPlot文档中文版
说明
这是从网上手动翻译的
Plottables
Plottables是在QCustomPlot中显示任何类型数据的类。它们都来自QCPAbstractPlottable。例如,QCPGraph是一个可绘图的图形,它显示具有不同线条样式、分散样式、填充等的图形。
由于绘制图形是一个如此重要的用例,QCustomPlot有一个特殊的接口来使用QCPGraph绘图仪,这使得处理它们非常容易:
可以使用QCustomPlot::addGraph创建新图,并使用QCustomPlot::graph访问新图。
对于所有其他绘图仪,使用普通的绘图仪接口:首先,创建各自的绘图仪实例并添加到QCustomPlot,例如。
QCPCurve *newCurve = new QCPCurve(customPlot->xAxis, customPlot->yAxis);
然后可以通过newCurve指针访问新创建的绘图仪的属性。
可通过QCustomPlot::plottable检索绘图(包括图形)。由于该函数的返回类型是所有可绘图板的抽象基类QCPAbstractPlottable,因此您可能希望qobject_cast将返回的指针转换为相应的可绘图板子类。和往常一样,如果绘图板不是特定的子类,强制转换将返回0。
所有进一步接口的绘图仪(e。如何设置数据)是特定于绘图类型。参见子类的文档:QCPGraph、QCPCurve、QCPBars、QCPStatisticalBox、QCPColorMap、QCPFinancial。
Controlling the Axes
QCustomPlot有四个默认轴:xAxis(底部)、yAxis(左侧)、xAxis2(顶部)、yAxis2(右侧)。
它们的范围是由简单的QCPRange类处理的,这个类基本上包含上下轴坐标。您可以使用QCPAxis::setRange函数设置范围。若要将轴标度类型从线性标度更改为对数标度,请将QCPAxis::setScaleType设置为QCPAxis:: st对数。在这种情况下,您还需要以对数间隔的刻度和刻度标签,因此使用QCPAxis::setTicker将axis ticker设置为QCPAxisTickerLog实例。
每个轴可以被赋予一个轴标签(例如。“电压(mV)”)与QCPAxis::setLabel。
默认情况下,axis会以一种合理的方式自动创建和标记刻度。有关微调,请参阅QCPAxis文档中的各种方法。可以通过QCPAxis::setTicks禁用轴的刻度。如果您只想隐藏刻度标签(数字),请使用QCPAxis:: setticktags。请注意,默认的右轴和顶轴从隐藏的刻度标签开始。
轴骨干到各个视图/小部件边界的距离称为其边界。通常,边距会自动计算以适应轴和刻度标签。要更改此设置,请设置QCPAxisRect::setAutoMargins以排除相应的边距,并使用QCPAxisRect:: setmargin手动设置边距。可以使用QCustomPlot::axisRect()访问主轴矩形。在QCPAxisRect和QCPAxis文档中详细解释了不同的边距/填充/偏移选项。
Plot Legend
默认情况下,每个QCustomPlot都有一个QCPLegend(作为QCustomPlot::legend)。图例是plot中的一个小布局元素,它用一个可绘图板行/符号图标和一个名称(QCPAbstractPlottable::setName)列出可绘图板。绘图板可以通过QCPAbstractPlottable::addToLegend和QCPAbstractPlottable::removeFromLegend从图例中添加和删除。默认情况下,向QCustomPlot添加一个绘图板也会自动将其添加到图例中。可以使用QCustomPlot::setAutoAddPlottableToLegend属性更改此行为。
QCPLegend还提供了一个接口,可以直接访问、添加和删除图例项。参见QCPLegend::item, QCPLegend::itemWithPlottable, QCPLegend::addItem, QCPLegend::removeItem等。
布局系统支持多个图例(因为QCPLegend是一个普通的布局元素)。
User Interaction
QCustomPlot支持使用鼠标拖动轴的范围(QCPAxisRect::setRangeDrag),使用鼠标滚轮缩放轴的范围(QCPAxisRect::setRangeZoom),以及一个完整的选择机制,它的粒度可配置到数据点和数据范围。
这些交互的可用性由QCustomPlot:: setinteraction控制。有关交互系统的详细信息,请参阅那里的文档。在专用数据选择机制页面上详细讨论了数据选择。
此外,当对象被单击或双击时,QCustomPlot总是发出相应的信号。例如,参见QCustomPlot::plottableClick、QCustomPlot::plottableDoubleClick和QCustomPlot::axisClick。
最后,在最低级别上,您可以在自己的子类中使用QCPLayerable鼠标事件虚拟方法,QCustomPlot实例调用受影响的layerable。
Decorations and Auxiliary Items
除了可绘图对象,还有另一类重要的绘图对象:项。所有项的基类都是QCPAbstractItem。项目与可标绘对象的区别在于它不需要绑定到任何轴上。这意味着它也可以定位在绝对像素坐标中,也可以定位在轴矩形上的相对位置。此外,它通常不直接表示数据,而是作为装饰、强调、描述等。
考虑到动态行为,可以在父-子层次结构中安排多个项。例如,你可以把箭头的头部放在一个固定的坐标上,所以它总是指向图中某个重要的区域。箭头的尾部可以锚定到文本项,该文本项始终位于axis rect的顶部中心,与用户拖动轴范围的位置无关。这样,箭头就会拉伸并旋转,因此它总是从标签指向指定的绘图坐标,而不需要任何进一步的代码。
有关更详细的介绍,请参阅QCPAbstractItem文档,并从中了解各个标准项的文档,以了解如何使用它们。
Layout Elements and Layouts
QCustomPlot使用一个内部布局系统来提供对象的动态大小和位置,如轴矩形、图例、颜色刻度和其他布局元素。它们都基于QCPLayoutElement,并通过将它们放置在QCPLayout子类(如QCPLayoutGrid)中来安排。
OpenGL Accelerated Plotting and Performance Improvement
QCustomPlot有多个OpenGL后端,可以跨所有支持的Qt版本提供OpenGL硬件加速绘图。如果计算机支持OpenGL,您可以通过使用QCUSTOMPLOT_USE_OPENGL编译并在相应的QCustomPlot实例上调用setOpenGl(true)来启用它。该方法的文档中给出了更多细节。
关于如何为高要求的可视化任务最大化地块性能的信息,可以在关于地块性能改进的专页上找到。
Preprocessor Define Flags
QCustomPlot理解一些对调试和编译有用的预处理器定义。在包含QCustomPlot标头之前,必须定义标志。通常,最好使用define += QCUSTOMPLOT_USE_OPENGL将它们添加到qmake项目文件中
QCUSTOMPLOT_USE_OPENGL
如果定义了这个标志,QCustomPlot可以使用OpenGL来提高绘图需求图的绘图性能,参见QCustomPlot::setOpenGl。
QCUSTOMPLOT_COMPILE_LIBRARY
将QCustomPlot编译为共享库(.so/.dll)时定义此标志
QCUSTOMPLOT_USE_LIBRARY
当使用QCustomPlot作为共享库时,在包含标题之前定义此标志
QCUSTOMPLOT_CHECK_DATA
如果定义了此标志,QCustomPlot绘图仪将在每次重绘时执行数据有效性检查。当遇到inf或nan值时,它们将给出qDebug输出(如果有意使用静默的NaNs在图中创建间隙,也会给出qDebug输出)。