QCustomPlot(1)-QCustomPlot

QCustomPlot(1)-QCustomPlot

  • 枚举
    • LayerInsertMode
    • RefreshPriority
  • 1 函数
    • 1.1 setViewport
    • 1.2 setBufferDevicePixelRatio
    • 1.3 setBackground
    • 1.4 setBackgroundScaled
    • 1.5 setBackgroundScaledMode
    • 1.6 setAntialiasedElements
    • 1.7 setAntialiasedElement
    • 1.8 setNotAntialiasedElements
    • 1.9 setNotAntialiasedElement
    • 1.10 setAutoAddPlottableToLegend
    • 1.11 setInteractions
    • 1.12 setInteraction
    • 1.13 setSelectionTolerance
    • 1.14 setNoAntialiasingOnDrag
    • 1.15 setPlottingHints
    • 1.16 setPlottingHint
    • 1.17 setMultiSelectModifier
    • 1.18 setSelectionRectMode
    • 1.19 setSelectionRect
    • 1.20 setOpenGl
    • 1.21 plottable
    • 1.22 plottable
    • 1.23 removePlottable
    • 1.24 clearPlottables
    • 1.25 plottableCount
    • 1.26 selectedPlottables
    • 1.27 itemAt
    • 1.28 hasItem
    • 1.29 layer
    • 1.30 setCurrentLayer
    • 1.31 layerCount
    • 1.32 addLayer
    • 1.33 removeLayer
    • 1.34 moveLayer
    • 1.35 axisRectCount
    • 1.36 axisRect
    • 1.37 axisRects
    • 1.38 layoutElementAt
    • 1.39 axisRectAt
    • 1.40 rescaleAxes
    • 1.41 selectedAxes
    • 1.42 selectedLegends
    • 1.43 deselectAll
    • 1.44 savePdf
    • 1.45 savePng
    • 1.46 saveJpg
    • 1.47 saveBmp
    • 1.49 saveRastered
    • 1.50 toPixmap
    • 1.51 toPainter
    • 1.52 replotTime
  • 2 Public Members
  • 3 Signals
  • 4 Protected Functions

枚举

LayerInsertMode

QCustomPlot::LayerInsertMode 是一个枚举,它定义了相对于另一个图层如何插入一个图层。这个枚举主要是在处理QCustomPlot库中的绘图层时使用,以确定新的层应该如何相对于已存在的层进行定位。

以下是LayerInsertMode的值:
limBelow:
描述: 将新的层插入到指定的层的下方。
limAbove:

描述: 将新的层插入到指定的层的上方。
例如,当您在绘图中添加新的元素或数据系列并希望它们在其他元素之上或之下显示时,就需要使用到这个枚举。

插入图层的相对位置是在绘图过程中决定绘制顺序的关键因素。位于顶部的图层的内容将最后绘制,从而确保它出现在其他图层之上。相反,位于底部的图层将首先绘制。

这个机制提供了非常灵活的绘图控制,允许用户微调哪些元素应该出现在最前面,哪些应该在背后。

RefreshPriority

QCustomPlot::RefreshPriority 是一个枚举,它定义了在重新绘制后QCustomPlot表面的刷新时机。

以下是RefreshPriority的可能值和它们的描述:

rpImmediateRefresh:
描述: 立即重新绘制并通过调用QWidget::repaint()立即重绘小部件。
rpQueuedRefresh:
描述: 立即重新绘制,但是通过调用QWidget::update()来队列小部件的重绘。这样,可以避免多次不必要的小部件重绘。
rpRefreshHint:
描述: 使用即时刷新还是队列刷新取决于是否设置了绘图提示QCP::phImmediateRefresh。参见setPlottingHints。
rpQueuedReplot:
描述: 为下一个事件循环迭代队列整个重新绘制。这样,可以避免多次不必要的重新绘制。然后使用rpRefreshHint优先级进行实际的重新绘制。
简而言之,这个枚举允许用户指定在进行重新绘制后如何刷新或重绘QCustomPlot的表面。这是为了确保高效的绘图,尤其是在大量数据或频繁更新的场景中,其中不必要的重绘可能会导致性能下降。

1 函数

1.1 setViewport

void setViewport (const QRect &rect)
QRect viewport () const
setViewport函数的主要目的是为了设置QCustomPlot的绘图区域,也就是说,它决定了哪部分区域应该被用于绘图。

  1. 绘图区域:在QCustomPlot中,viewport是一个矩形区域,表示图表应该在其中进行绘制的区域。这个区域包括了坐标轴、标签、刻度标记以及图表内容本身。

  2. 布局与间距:当您在QCustomPlot中设置间距、边距或其他布局参数时,这些设置是基于viewport的。例如,如果您想要设置图表的边距,那么这个边距是相对于viewport的。

  3. 导出与尺寸:虽然在常规显示中,viewport通常与QCustomPlot小部件的尺寸相同,但在导出图像或打印时,您可能希望viewport具有与屏幕显示不同的尺寸。例如,如果您想要导出一个特定尺寸的图像,但不希望更改小部件的大小,您可以使用setViewport来设置导出图像的尺寸。

  4. 控制可见内容:如果您只想在QCustomPlot的一个子区域中显示图表内容(例如,为了实现某种特殊效果或布局),可以使用setViewport来实现。

需要注意的是,虽然setViewport可以用来设置绘图区域的大小和位置,但它不会影响小部件本身的大小。如果您需要改变小部件的大小,应该使用resize方法。

setViewport是一个用于微调和控制QCustomPlot如何在其区域内部绘制内容的工具。对于大多数常规用途,您可能不需要直接使用它,但在某些特殊情况下,它可能会很有用。

customPlot->setViewport(QRect(0,0,200,200));
customPlot->replot();

1.2 setBufferDevicePixelRatio

void setBufferDevicePixelRatio (double ratio)
double bufferDevicePixelRatio () const
setBufferDevicePixelRatio函数的主要功能是为QCustomPlot实例的绘制缓冲区设置设备像素比率。
参数:ratio - 设备像素比率值。通常这个值表示逻辑像素和物理像素的比例。

功能与用途:

设备像素比率:设备像素比率描述了逻辑像素和物理像素之间的比例。例如,对于普通的显示屏,这个值为1,意味着每个逻辑像素对应一个物理像素。但对于高DPI的显示(例如Retina屏幕),这个值可能为2或更高。

自动初始化:默认情况下,你不需要手动设置这个值。因为它会自动用QWidget::devicePixelRatio进行初始化,此值由Qt配置以匹配当前的显示设备。

高DPI支持:高分辨率或称为高DPI显示屏可以显示更加清晰、锐利的图像。为了确保图形或其他绘制的内容在这种显示上看起来更加清晰,Qt提供了设备像素比率的概念。当绘制到一个高DPI的设备时,图形内容实际上会以更高的分辨率绘制,然后再按照设备像素比率缩放到逻辑大小。

Qt版本限制:Qt在5.4版本及以后才开始支持设备像素比率功能。如果在这之前的版本中使用setBufferDevicePixelRatio,QCustomPlot将输出一个调试消息,并将内部的缓冲设备像素比率保持为1.0。

使用场景:

虽然在大多数情况下你不需要手动设置这个值,但在某些特殊情况下,如当你知道目标设备的确切像素比率并且希望按照这个比率来绘制内容时,你可以使用这个函数。

1.3 setBackground

void setBackground (const QPixmap &pm)
void setBackground (const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode=Qt::KeepAspectRatioByExpanding)
void setBackground (const QBrush &brush)

  1. setBackground(const QPixmap &pm)
    这个函数设置viewport的背景图片。
    参数:pm - 作为背景的QPixmap对象。
    如果提供的图片与viewport的大小不同,可以启用缩放功能。对于带有半透明区域的背景图片,如果之前已经使用setBackground(const QBrush &brush)设置了背景画刷,那么首先会使用该画刷填充viewport,然后再绘制背景图片。
QPixmap pixmap("path/to/image.jpg");
customPlot->setBackground(pixmap);
  1. setBackground(const QPixmap &pm, bool scaled, Qt::AspectRatioMode mode = Qt::KeepAspectRatioByExpanding)
    这是一个重载函数,允许你在一次调用中设置背景图片、是否缩放以及如何缩放。
    参数:
    pm:作为背景的QPixmap对象。
    scaled:是否缩放背景图片以适应viewport的大小。
    mode:如何缩放图片。默认是Qt::KeepAspectRatioByExpanding,这意味着图片会被扩展到填充整个viewport,同时保持其纵横比。
QPixmap pixmap("path/to/image.jpg");
customPlot->setBackground(pixmap, true, Qt::KeepAspectRatio);
  1. setBackground(const QBrush &brush)
    该函数允许你为viewport设置背景画刷。
    参数:brush - 作为背景的QBrush对象。
    在绘制其他所有内容之前,背景会使用该画刷填充。如果之前已经使用setBackground(const QPixmap &pm)设置了背景图片,那么在绘制背景图片之前会使用此画刷来填充viewport。
QBrush brush(Qt::red);  // 创建一个红色画刷
customPlot->setBackground(brush);

若要将背景设置为透明,可以使用Qt::NoBrush或Qt::Transparent。
customPlot->setBackground(Qt::Transparent);
总的来说,这些函数为你提供了多种设置QCustomPlot背景的方法,从简单的颜色填充到复杂的图片背景都可以轻松实现。

1.4 setBackgroundScaled

void QCustomPlot::setBackgroundScaled ( bool scaled)
设置QCustomPlot的viewport背景图片是否需要进行缩放以适应viewport的大小。
参数:scaled - 一个布尔值,表示是否要缩放背景图片。
功能与用途:
当scaled设置为true时,背景图片将被缩放以适应viewport的大小。如何维持原始图片的纵横比可以通过setBackgroundScaledMode函数来设置。

如果选择缩放背景图片,缩放后的图片会被缓存。这意味着在多次重新绘制(replot)时,性能不会受到影响。唯一的例外是当viewport的尺寸连续改变时。

1.5 setBackgroundScaledMode

void setBackgroundScaledMode (Qt::AspectRatioMode mode)
设置在对 QCustomPlot 的viewport背景图片进行缩放时,如何维持其原始图片的纵横比。
参数:
mode:这是一个Qt::AspectRatioMode枚举值,它决定了如何缩放图片。
Qt::AspectRatioMode 的常见选项:
Qt::IgnoreAspectRatio:不保持原始的纵横比进行缩放。这可能导致图片在水平或垂直方向上被拉伸或压缩。
Qt::KeepAspectRatio:缩放图片时保持原始的纵横比。结果图片可能不会完全填充viewport,但不会发生扭曲。
Qt::KeepAspectRatioByExpanding:保持原始的纵横比进行缩放,但确保填充整个viewport。这可能导致图片的部分区域在viewport外部。

1.6 setAntialiasedElements

void setAntialiasedElements ( const QCP::AntialiasedElements & antialiasedElements)
设置在 QCustomPlot 中哪些元素应该被强制进行反锯齿(antialiased)处理。
参数:
antialiasedElements:一个表示要进行反锯齿处理的元素的组合的枚举值。
功能和用途:
该函数可以强制为整个元素组设置反锯齿处理,通常这些设置是通过在各个元素上使用setAntialiased函数进行控制的。
如果一个元素既没有在 setAntialiasedElements 中被指定,也没有在 setNotAntialiasedElements 中被指定,则会使用每个单独元素实例上的反锯齿设置。
举个例子,如果 antialiasedElements 包含 QCP::aePlottables,那么所有的 plottables 都会进行反锯齿处理,无论特定的 QCPAbstractPlottable::setAntialiased 值如何设置。
如果 antialiasedElements 中的某个元素已经在 setNotAntialiasedElements 中设置了,那么它会从后者中被移除。

1.7 setAntialiasedElement

void setAntialiasedElement ( QCP::AntialiasedElement antialiasedElement, bool enabled = true )
指定元素设置是否进行反锯齿处理。
参数:
antialiasedElement:表示要设置反锯齿处理的元素的枚举值。
enabled:一个布尔值,指定是否启用反锯齿处理。默认值为 true。
功能和用途:
与 setAntialiasedElements 类似,此函数也用于为图表中的元素设置反锯齿处理,但它只设置一个元素,而不是一组元素。
如果 enabled 设置为 true,指定的元素将进行反锯齿处理。如果设置为 false,则该元素不会进行反锯齿处理,无论其原始设置如何。

1.8 setNotAntialiasedElements

void setNotAntialiasedElements ( const QCP::AntialiasedElements & notAntialiasedElements)
允许你指定在 QCustomPlot 中的哪些元素是不应该被反锯齿处理的。
参数:

notAntialiasedElements:一个或组合的 QCP::AntialiasedElement 枚举值,指定不应被反锯齿处理的元素。
功能和用途:

该函数能够为整个元素组强制设置不进行反锯齿处理,通常这些设置是由各自元素的 setAntialiasing 函数进行控制的。

如果某个元素既没有被指定在 setAntialiasedElements,也没有被指定在 setNotAntialiasedElements 中,那么将使用该元素实例的反锯齿设置。

例如,如果 notAntialiasedElements 包含了 QCP::aePlottables,那么不管 QCPAbstractPlottable::setAntialiased 如何设置,plottables 都不会被进行反锯齿处理。

如果 notAntialiasedElements 中的某个元素已经在 setAntialiasedElements 中被设置了,那么它将会从 setAntialiasedElements 中被移除。

1.9 setNotAntialiasedElement

void setNotAntialiasedElement (QCP::AntialiasedElement notAntialiasedElement, bool enabled=true)

此函数设置指定的 notAntialiasedElement 是否被强制绘制为非抗锯齿。参数 notAntialiasedElement 是一个 QCP::AntialiasedElement 枚举值,表示图形元素的类型。参数 enabled 决定该元素是否强制禁用抗锯齿。

如果 enabled 为 true(默认值),指定的元素将不使用抗锯齿进行绘制。如果 enabled 为 false,该设置将被取消,此元素的抗锯齿设置将回到其默认或先前的状态。

1.10 setAutoAddPlottableToLegend

void setAutoAddPlottableToLegend (bool on)
它控制是否自动将新添加到 QCustomPlot 的可绘制对象(例如图表)添加到图例中。

描述:
此函数设置当添加一个可绘制对象(例如图形)到 QCustomPlot 时,是否自动将其也添加到图例(QCustomPlot::legend)中。
参数 on 决定此自动添加功能是否开启:
如果 on 为 true,则每当添加一个新的可绘制对象到图表中,它也会自动出现在图例中。
如果 on 为 false,则添加新的可绘制对象到图表时不会自动添加到图例中,除非你手动执行此操作。

1.11 setInteractions

void setInteractions (const QCP::Interactions &interactions)
设置用户与 QCustomPlot 图表交互的功能的函数。通过这个函数,你可以控制用户在图表上可以进行哪些操作,例如拖动轴范围、缩放轴范围、选择绘图数据、选择图例项等。

描述:
该函数设置此 QCustomPlot 可能的交互作为 QCP::Interaction 枚举值的或组合。以下是可能的交互类型:

  • 轴范围操作:通过 QCP::iRangeDrag 和 QCP::iRangeZoom 控制。启用相应的交互后,用户可以使用鼠标拖动轴范围和使用鼠标滚轮进行缩放。

  • 可绘制数据选择:由 QCP::iSelectPlottables 控制。设置后,用户可以通过点击它们或它们附近来选择绘图数据。

  • 项选择:通过 QCP::iSelectItems 控制。设置后,用户可以通过点击它们或它们附近来选择项(如 QCPItemLine,QCPItemText 等)。

  • 轴选择:使用 QCP::iSelectAxes 控制。设置后,用户可以通过点击轴的各个部分来选择它们。

  • 图例选择:使用 QCP::iSelectLegend 控制。设置后,用户可以通过点击图例或其各个项目来选择它们。

  • 其他可选元素:所有其他可选择的对象(例如 QCPTextElement 或您自己的层子类)的选择由 QCP::iSelectOther 控制。

  • 多选:为了允许通过保持选择修饰符(通过 setMultiSelectModifier 设置)来选择多个对象,可以设置 QCP::iMultiSelect 标志。

1.12 setInteraction

void setInteraction (const QCP::Interaction &interaction, bool enabled=true)
允许你开启或关闭 QCustomPlot 中的单个交互功能。这是与 setInteractions 功能类似,但是它只影响一个特定的交互,而不是一组交互。

描述:
该函数允许你为 QCustomPlot 启用或禁用单个交互功能。
interaction:这是你想要开启或关闭的交互的枚举值,如 QCP::iRangeDrag, QCP::iSelectPlottables 等。
enabled:这是一个布尔值,默认为 true。如果为 true,则启用指定的交互。如果为 false,则禁用它。
更多关于交互系统的详细信息,请参考 setInteractions 函数。

假设你有一个 QCustomPlot 实例叫做 customPlot 并且你想启用轴范围拖动功能,你可以这样做:

customPlot->setInteraction(QCP::iRangeDrag, true);

1.13 setSelectionTolerance

void setSelectionTolerance (int pixels)
设置选择对象时的点击容差。它对于线条类型的对象特别有意义,因为线条可能非常细,很难准确地用鼠标点击。

描述:
此函数用于设置决定是否选中一个对象(如一个绘图对象)的容差。

  • pixels:容差值,单位为像素。它表示鼠标点击位置与对象之间的最大距离,以使对象被选中。

例如,如果用户点击了一个 QCPGraph 的线附近,只有当点击位置与图线之间的最小距离小于 pixels 时,才会被视为一个潜在的选择。由区域定义的对象(如 QCPBars)只对区域内的直接点击做出反应,忽略此选择容差。换句话说,该参数仅对由于太细而无法准确点击的对象部分有意义。

此功能对于那些可能由于其表示方式而难以精确选择的对象特别有用,如线条。

1.14 setNoAntialiasingOnDrag

void setNoAntialiasingOnDrag ( bool enabled)
函数在用户拖动轴范围时启用或禁用抗锯齿。这对于性能优化非常有用,可以使拖动体验更灵敏,特别是在绘制许多对象时。

  • 描述:

此函数设置用户拖动坐标轴范围时是否禁用此 QCustomPlot 的抗锯齿。如果有许多对象,尤其是绘图对象,以抗锯齿方式绘制,这将在拖动过程中大大提高性能。这样可以创建更具响应性的用户体验。一旦用户停止拖动,最后的重新绘制将使用正常的抗锯齿来恢复高质量的图像。

  • 参数:

enabled:一个布尔值,确定是否在拖动时禁用抗锯齿。true 表示在拖动时禁用抗锯齿,而 false 表示在拖动时仍启用抗锯齿。

1.15 setPlottingHints

void setPlottingHints (const QCP::PlottingHints &hints)
是一个设计用于指定和控制 QCustomPlot 在执行绘图操作时的行为和特性的函数。通过使用 QCP::PlottingHint 枚举值,你可以调整和优化绘图的一些特定方面,这可能涉及渲染性能或图形的表现形式。

  • 参数:
  1. hints:一个或组合的 QCP::PlottingHint 枚举值。它定义了在绘制过程中要应用的特定行为和性能提示。

QCP::PlottingHint 枚举的可能值有:
2. QCP::phNone: 默认的行为,没有特定的绘图提示。
3. QCP::phFastPolylines: 当绘制线时,优化线的绘制速度。这在绘制大量的数据线时特别有用。
4. QCP::phImmediateRefresh: 在进行绘图操作后立即刷新显示,这确保了最新的绘图总是立即显示,而不是在稍后的某个时间。
5. QCP::phCacheLabels: 缓存轴标签,这样在重新绘制时可以更快地显示它们。

1.16 setPlottingHint

void setPlottingHint (QCP::PlottingHint hint, bool enabled=true)
QCustomPlot::setPlottingHint函数用于开启或关闭指定的绘图提示。与QCustomPlot::setPlottingHints稍有不同,该函数只影响一个特定的绘图提示,而不是一组或组合的提示。

参数:

hint:QCP::PlottingHint枚举中的一个值,表示要设置的特定绘图提示。

enabled:布尔值,表示是否启用或禁用该提示。默认值为true,表示启用。

QCP::PlottingHint枚举的可能值有:

QCP::phNone: 默认行为,没有特定的绘图提示。
QCP::phFastPolylines: 当绘制线条时,优化线的绘制速度。
QCP::phImmediateRefresh: 在绘图操作后立即刷新显示。
QCP::phCacheLabels: 缓存轴标签以提高重新绘制的速度。

1.17 setMultiSelectModifier

void setMultiSelectModifier ( Qt::KeyboardModifier modifier)
QCustomPlot::setMultiSelectModifier 函数用于设置多选的键盘修饰符。如果用户希望一次选择多个对象或数据点,他们可以在点击这些对象或数据点时按住这个键盘修饰符。

参数:
modifier:表示要作为多选修饰符的键盘按键。它属于 Qt::KeyboardModifier 枚举。
Qt::KeyboardModifier 枚举中包含了诸如 Qt::ShiftModifier、Qt::ControlModifier、Qt::AltModifier 等常见的键盘修饰键。

默认行为:
如果您没有使用 setMultiSelectModifier 设置修饰符,那么默认的多选修饰符为 Qt::ControlModifier,即 Ctrl 键。

customPlot->setMultiSelectModifier(Qt::AltModifier); // 设置Alt键为多选修饰符

1.18 setSelectionRectMode

void setSelectionRectMode (QCP::SelectionRectMode mode)
QCustomPlot::setSelectionRectMode 是 QCustomPlot 的一个方法,它用于设置当用户点击并拖动鼠标时的矩形选择模式。这个矩形选择可以用于选择多个数据点或图形元素,也可以用于放大或缩小图表的特定区域。

QCustomPlot::setSelectionRectMode 是 QCustomPlot 的一个方法,它用于设置当用户点击并拖动鼠标时的矩形选择模式。这个矩形选择可以用于选择多个数据点或图形元素,也可以用于放大或缩小图表的特定区域。

参数:

mode:指定所需的矩形选择模式。它是 QCP::SelectionRectMode 枚举的一个值。
QCP::SelectionRectMode 枚举提供以下模式:

QCP::srmNone: 矩形选择被禁用。
QCP::srmZoom: 使用矩形选择可以放大图表的特定区域。
QCP::srmSelect: 使用矩形选择来选择图中的多个数据点或图形元素。
QCP::srmCustom: 允许自定义矩形选择的行为。

customPlot->setSelectionRectMode(QCP::srmZoom); // 设置为放大模式

QCustomPlot 还提供了其他相关的方法,例如 selectionRect,它返回当前的选择矩形(QCPSelectionRect 类型),允许进一步自定义其属性和行为。

总的来说,setSelectionRectMode 方法为用户提供了一种直观的方式来选择或放大图表的特定部分。

1.19 setSelectionRect

void setSelectionRect (QCPSelectionRect *selectionRect)
允许你为 QCustomPlot 实例设置一个自定义的选择矩形。这是在进行矩形选择(如放大或选择多个数据点)时使用的。

  • 函数参数:

selectionRect: 一个指向 QCPSelectionRect 实例的指针,这将成为新的选择矩形。QCustomPlot 将成为该对象的父对象,因此在销毁 QCustomPlot 实例时,也将销毁它。
功能描述:
当你需要自定义矩形选择的外观或行为时,这个方法会很有用。例如,你可能想要一个具有特定边框颜色、线型或填充颜色的矩形选择。为此,你可以创建一个 QCPSelectionRect 的子类,进行必要的自定义,然后使用此方法将其设置为 QCustomPlot 实例的选择矩形。

  • 注意:

如果之前已经存在一个选择矩形,那么在设置新的选择矩形之前,旧的选择矩形将被销毁。
传递给此方法的 QCPSelectionRect 实例不应该有其他的父对象,因为它将被重新父化为 QCustomPlot 实例。

1.20 setOpenGl

void QCustomPlot::setOpenGl ( bool enabled, int multisampling = 16 )

允许你开启或关闭 QCustomPlot 实例的 OpenGL 加速功能。当启用 OpenGL 时,绘图会更加流畅,特别是在有大量数据点或复杂场景时。这是因为图形渲染任务从 CPU 转移到了 GPU 上执行。

函数参数:

enabled: 一个布尔值,指定是否启用 OpenGL 加速。如果为 true,则启用 OpenGL,如果为 false,则禁用。

multisampling: 一个整数,指定多重采样的级别,用于抗锯齿。默认值为16,这通常可以得到很好的抗锯齿效果。如果你遇到性能问题,可以尝试减少这个值。

功能描述:
启用 OpenGL 可以大大提高绘图性能,但也可能导致某些特定的渲染问题或与特定的图形驱动程序不兼容的问题。因此,开启这个功能之前,最好先进行一些测试,确保它在目标平台上可以正确工作。

注意:

在调用此方法以启用 OpenGL 之前,确保已经在你的 Qt 应用程序中正确配置和使用了 OpenGL。
不是所有的 QCustomPlot 功能都与 OpenGL 兼容。在开启 OpenGL 后,某些功能可能不会按预期工作。
切换 OpenGL 状态会导致 QCustomPlot 重新初始化,并可能导致之前的设置(例如缓存)丢失。

customPlot->setOpenGl(true);  // 启用 OpenGL 加速

1.21 plottable

QCPAbstractPlottable * plottable ( int index)
QCPAbstractPlottable *QCustomPlot::plottable(int index) 是一个方法,它返回位于指定索引位置的绘制项。在 QCustomPlot 中,所有的可绘制项都是 QCPAbstractPlottable 类型或其子类。这包括图形(graphs)、曲线(curves)、条形图(bars)等。

函数参数:

index: 一个整数,指定要查询的绘制项的索引。索引是按照添加顺序从0开始编号的。
返回值:

如果指定索引位置存在绘制项,则返回对应的 QCPAbstractPlottable 指针。
如果指定索引超出了范围,或者没有对应的绘制项,它会返回 nullptr。
使用注意:
在使用返回的 QCPAbstractPlottable 指针前,最好检查它是否为 nullptr,以避免潜在的空指针解引用错误。

QCPAbstractPlottable *plottableItem = customPlot->plottable(0);
if (plottableItem) {
    qDebug() << "Plottable at index 0 exists with name:" << plottableItem->name();
} else {
    qDebug() << "No plottable found at index 0.";
}

1.22 plottable

QCPAbstractPlottable * plottable ( )
获取QCustomPlot实例中添加的第一个可绘制对象(plottable)。如果没有任何可绘制对象,此方法将返回nullptr。使用这个方法,你可以方便地访问和修改与该可绘制对象关联的属性或数据。如果你有多个可绘制对象并想要访问特定的一个,你可能需要使用带有索引参数的plottable(int index)方法。

1.23 removePlottable

bool removePlottable (QCPAbstractPlottable *plottable)
此方法用于从QCustomPlot实例中删除指定的可绘制对象(plottable)。

  • 参数:

plottable:一个指向希望从QCustomPlot中删除的可绘制对象的指针。

  • 返回值:

如果指定的plottable成功被删除,则返回true。
如果传入的plottable不在此QCustomPlot实例中,函数返回false。
注意:删除后,plottable的内存不会自动被释放,你需要手动删除它以避免内存泄露。但在删除之前,请确保没有其他地方再使用这个plottable。

bool removePlottable (int index)
通过其索引移除并删除可绘制对象。
这个函数的目的是通过提供的索引值来移除并删除一个可绘制的对象(例如,图中的线、点等)。

参数说明:
int index:这是你希望移除的可绘制对象的索引值。
返回值:
bool:如果成功移除并删除了可绘制对象,那么返回true;如果出现任何问题或索引不正确,那么返回false。

1.24 clearPlottables

int clearPlottables ()
移除图中的所有可绘制对象并删除它们。相应的图例项也会从默认图例(QCustomPlot::legend)中移除。
返回被移除的可绘制对象的数量。
此函数旨在从图中移除所有的可绘制对象(例如,线、点等),并将它们删除。同时,与这些可绘制对象相关的图例项也会从默认的图例中移除。

参数说明:
该函数没有参数。
返回值:
int:返回被成功移除并删除的可绘制对象的数量。

当你希望清空图中的所有内容,使其恢复到一个没有任何数据或绘制对象的状态时,可以使用这个函数。但请注意,在调用这个函数后,所有的可绘制对象都会被删除,不仅仅是从图中移除。所以在调用这个函数之前,请确保已经保存了所有重要的数据或对象。

1.25 plottableCount

int plottableCount () const
返回当前图中存在的可绘制对象的数量。

1.26 selectedPlottables

QList< QCPAbstractPlottable * > selectedPlottables () const
返回当前已选择的可绘制对象的列表。

返回值:
QList< QCPAbstractPlottable * >:这是一个列表,包含指向已选择的可绘制对象的指针。这里的QCPAbstractPlottable是所有可绘制对象的基类,所以返回的列表可以包含各种类型的可绘制对象,如线、点或其他图形元素。
使用场景:
这个函数在你需要知道哪些图形元素被用户或程序选择时特别有用。例如,用户可能在交互式图中选择了某些线或点,然后你可以使用这个函数来获取这些已选择的元素,进而执行一些操作,如修改它们的属性、删除它们或执行其他任务。

1.27 itemAt

template ItemType itemAt(const QPointF &pos, bool onlySelectable=false) const*
功能:基于给定的位置检索特定类型的项目。
参数:
pos: 一个QPointF类型的点,表示要检查的位置。
onlySelectable: 如果为true,则仅返回在该位置且可选择的项目。
返回值:在指定位置的ItemType类型的项目的指针。如果没有项目或不满足可选择性条件,则返回nullptr。

QCPAbstractItem itemAt(const QPointF &pos, bool onlySelectable=false) const
功能:基于给定的位置检索项目。
参数:
pos: 一个QPointF类型的点,表示要检查的位置。
onlySelectable: 如果为true,则仅返回在该位置且可选择的项目。
返回值:在指定位置的项目的指针。如果没有项目或不满足可选择性条件,则返回nullptr。

1.28 hasItem

bool hasItem(QCPAbstractItem item) const
功能:检查给定的项目是否存在于图中。
参数:
item: 要检查的项目的指针。
返回值:如果项目存在于图中,则返回true,否则返回false。

1.29 layer

QCPLayer layer(const QString &name) const
功能:根据给定的层名称检索层。
参数:
name: 层的名称。
返回值:与名称匹配的层的指针。如果没有找到匹配的层,则返回nullptr。

QCPLayer layer(int index) const
功能:根据索引检索层。
参数:
index: 层的索引。
返回值:与索引匹配的层的指针。

1.30 setCurrentLayer

bool setCurrentLayer(QCPLayer layer)
功能:设置给定的层为当前活动的层。
参数:
layer: 新的活动层的指针。
返回值:如果成功设置了活动层,则返回true,否则返回false。

bool setCurrentLayer(const QString &name)
功能:设置当前活动的层为给定的名称。
参数:
name: 新的活动层的名称。
返回值:如果成功设置了活动层,则返回true,否则返回false。

QCPLayer currentLayer() const
功能:获取当前活动的层。
返回值:当前活动层的指针。

1.31 layerCount

int layerCount() const
功能:获取图中层数量。
返回值:图中层数量。

1.32 addLayer

bool addLayer(const QString &name, QCPLayer otherLayer=nullptr, LayerInsertMode insertMode=limAbove)
功能:在图中添加一个新层。
参数:
name: 新层的名称。
otherLayer: 作为参考的其他层的指针。
insertMode: 插入模式,确定新层与参考层的位置关系。
返回值:如果成功添加了新层,则返回true,否则返回false。

1.33 removeLayer

bool removeLayer(QCPLayer layer)
功能:从图中移除给定的层。
参数:
layer: 要移除的层的指针。
返回值:如果成功移除了层,则返回true,否则返回false。

1.34 moveLayer

bool moveLayer(QCPLayer layer, QCPLayer otherLayer, LayerInsertMode insertMode=limAbove)
功能:移动给定的层到另一个层的前面或后面。
参数:
layer: 要移动的层的指针。
otherLayer: 作为参考的其他层的指针。
insertMode: 插入模式,确定新层与参考层的位置关系。
返回值:如果成功移动了层,则返回true,否则返回false。

1.35 axisRectCount

int axisRectCount() const
功能:获取当前图中轴矩形(axisRect)的数量。
返回值:当前存在于图中的轴矩形数量。

1.36 axisRect

QCPAxisRect axisRect(int index=0) const
功能:根据给定的索引返回一个轴矩形(axisRect)的指针。
参数:
index: 轴矩形的索引,默认为0。
返回值:与给定索引对应的轴矩形的指针。

1.37 axisRects

QList< QCPAxisRect > axisRects() const
功能:获取图中所有的轴矩形。
返回值:一个包含所有轴矩形指针的列表。

1.38 layoutElementAt

QCPLayoutElement layoutElementAt(const QPointF &pos) const
功能:在给定位置检索布局元素。
参数:
pos: 一个QPointF类型的点,表示要检查的位置。
返回值:在给定位置的布局元素的指针。如果没有找到布局元素,则返回nullptr。

1.39 axisRectAt

QCPAxisRect axisRectAt(const QPointF &pos) const
功能:在给定位置检索轴矩形。
参数:
pos: 一个QPointF类型的点,表示要检查的位置。
返回值:在给定位置的轴矩形的指针。如果没有找到轴矩形,则返回nullptr。

1.40 rescaleAxes

Q_SLOT void rescaleAxes(bool onlyVisiblePlottables=false)
功能:根据可见的或所有的绘图数据重新缩放轴。
参数:
onlyVisiblePlottables: 如果为true,则仅根据当前可见的绘图数据重新缩放轴。默认为false,表示考虑所有的绘图数据。

1.41 selectedAxes

QList< QCPAxis > selectedAxes() const
功能:获取所有当前被选中的轴。
返回值:一个包含所有被选中的轴的指针的列表。

1.42 selectedLegends

QList< QCPLegend > selectedLegends() const
功能:获取所有当前被选中的图例。
返回值:一个包含所有被选中的图例的指针的列表。

1.43 deselectAll

Q_SLOT void deselectAll()
功能:取消选择图中的所有元素,包括轴、图例、标签等。

1.44 savePdf

bool savePdf (const QString &fileName, int width=0, int height=0, QCP::ExportPen exportPen=QCP::epAllowCosmetic, const QString &pdfCreator=QString(), const QString &pdfTitle=QString())
功能:保存图表为PDF格式。
参数:
fileName:PDF文件的保存路径。
width, height:输出的PDF文件的宽度和高度。如果为0,会使用图表的当前大小。
exportPen:导出时的笔参数。
pdfCreator:PDF文件的创建者信息。
pdfTitle:PDF文件的标题。
返回值:如果保存成功返回true,否则返回false。

1.45 savePng

bool savePng (const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch)
功能:保存图表为PNG格式。
参数描述与savePdf相似,但有一些与PNG特定的参数,如scale(放缩因子)、quality(图像质量)和resolution(分辨率)。

1.46 saveJpg

bool saveJpg (const QString &fileName, int width=0, int height=0, double scale=1.0, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch)
功能:保存图表为JPG格式。
参数描述与savePng相似。

1.47 saveBmp

bool saveBmp (const QString &fileName, int width=0, int height=0, double scale=1.0, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch)
功能:保存图表为BMP格式。
参数描述与savePng相似。

1.49 saveRastered

bool saveRastered (const QString &fileName, int width, int height, double scale, const char *format, int quality=-1, int resolution=96, QCP::ResolutionUnit resolutionUnit=QCP::ruDotsPerInch)
功能:以光栅格式保存图表。
参数:
format:保存的光栅格式,例如"PNG"、"JPG"等。
其他参数描述与savePng相似。

1.50 toPixmap

QPixmap toPixmap(int width=0, int height=0, double scale=1.0)
功能:将图表转换为QPixmap。
参数:
width, height:QPixmap的宽度和高度。
scale:放缩因子。
返回值:包含图表的QPixmap。

1.51 toPainter

void toPainter(QCPPainter painter, int width=0, int height=0)
功能:将图表绘制到给定的QCPPainter上。
参数:
painter:用于绘制的QCPPainter对象。
width, height:绘制的宽度和高度。

Q_SLOT void replot(QCustomPlot::RefreshPriority refreshPriority=QCustomPlot::rpRefreshHint)
功能:重新绘制图表。
参数:
refreshPriority:刷新的优先级,决定了如何进行重绘。

1.52 replotTime

double replotTime(bool average=false) const
功能:获取上次replot调用的时间或者所有replot调用的平均时间。
参数:
average:如果为true,返回所有replot调用的平均时间;否则,返回上次replot调用的时间。
返回值:所需的时间,单位是毫秒。

2 Public Members

QCPAxis * 	xAxis
QCPAxis * 	yAxis
QCPAxis * 	xAxis2
QCPAxis * 	yAxis2
QCPLegend * 	legend

QCPAxis * xAxis
描述:这是图表的主x轴的指针。
用途:您可以使用此指针来访问和修改x轴的属性,例如标签、刻度、范围等。

QCPAxis * yAxis
描述:这是图表的主y轴的指针。
用途:您可以使用此指针来访问和修改y轴的属性,与xAxis类似。

QCPAxis * xAxis2
描述:这是图表的次x轴的指针,通常位于图表的顶部。
用途:对于需要在顶部显示另外一组刻度或标签的应用,您可以使用xAxis2。例如,您可能想要在底部的x轴上显示日期,而在顶部的xAxis2上显示星期。

QCPAxis * yAxis2
描述:这是图表的次y轴的指针,通常位于图表的右侧。
用途:对于需要在右侧显示另外一组刻度或标签的应用,您可以使用yAxis2。

QCPLegend * legend
描述:这是图表的图例的指针。
用途:图例用于显示图表中各个数据系列的标识。通过这个指针,您可以访问和修改图例的属性,例如位置、字体、图例项等。

这些公开成员提供了对图表中最常见的组件的直接访问,使得用户可以方便地定制和操作这些组件。

3 Signals

void 	mouseDoubleClick (QMouseEvent *event)
void 	mousePress (QMouseEvent *event)
void 	mouseMove (QMouseEvent *event)
void 	mouseRelease (QMouseEvent *event)
void 	mouseWheel (QWheelEvent *event)
void 	plottableClick (QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event)
void 	plottableDoubleClick (QCPAbstractPlottable *plottable, int dataIndex, QMouseEvent *event)
void 	itemClick (QCPAbstractItem *item, QMouseEvent *event)
void 	itemDoubleClick (QCPAbstractItem *item, QMouseEvent *event)
void 	axisClick (QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event)
void 	axisDoubleClick (QCPAxis *axis, QCPAxis::SelectablePart part, QMouseEvent *event)
void 	legendClick (QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event)
void 	legendDoubleClick (QCPLegend *legend, QCPAbstractLegendItem *item, QMouseEvent *event)
void 	selectionChangedByUser ()
void 	beforeReplot ()
void 	afterLayout ()
void 	afterReplot ()

4 Protected Functions

virtual QSize 	minimumSizeHint () const
virtual QSize 	sizeHint () const
virtual void 	paintEvent (QPaintEvent *event)
virtual void 	resizeEvent (QResizeEvent *event)
virtual void 	mouseDoubleClickEvent (QMouseEvent *event)
virtual void 	mousePressEvent (QMouseEvent *event)
virtual void 	mouseMoveEvent (QMouseEvent *event)
virtual void 	mouseReleaseEvent (QMouseEvent *event)
virtual void 	wheelEvent (QWheelEvent *event)
virtual void 	draw (QCPPainter *painter)
virtual void 	updateLayout ()
virtual void 	axisRemoved (QCPAxis *axis)
virtual void 	legendRemoved (QCPLegend *legend)
virtual Q_SLOT void 	processRectSelection (QRect rect, QMouseEvent *event)
virtual Q_SLOT void 	processRectZoom (QRect rect, QMouseEvent *event)
virtual Q_SLOT void 	processPointSelection (QMouseEvent *event)
bool 	registerPlottable (QCPAbstractPlottable *plottable)
bool 	registerGraph (QCPGraph *graph)
bool 	registerItem (QCPAbstractItem *item)
void 	updateLayerIndices () const
QCPLayerable * 	layerableAt (const QPointF &pos, bool onlySelectable, QVariant *selectionDetails=nullptr) const
QList< QCPLayerable * > 	layerableListAt (const QPointF &pos, bool onlySelectable, QList< QVariant > *selectionDetails=nullptr) const
void 	drawBackground (QCPPainter *painter)
void 	setupPaintBuffers ()
QCPAbstractPaintBuffer * 	createPaintBuffer ()
bool 	hasInvalidatedPaintBuffers ()
bool 	setupOpenGl ()
void 	freeOpenGl ()

你可能感兴趣的:(QT中级,qt,QCustomPlot)