必需掌握的Qt图表绘制库!!!!

目录

绘图表

控制轴

图例

用户交互

装饰品及辅助物品

布局元素和布局

OpenGL 加速绘图和性能改进

预处理器定义标志

### 特点

### 使用步骤

1. **安装 QCustomPlot**

2. **配置项目文件**

3. **使用 QCustomPlot**

4. **自定义和扩展**

### 总结


`QCustomPlot` 是一个基于 Qt 的图表绘图库,用于在 Qt 应用程序中创建复杂的二维图表和图形。它非常适用于需要高性能、高度自定义和专业图表功能的应用程序。`QCustomPlot` 提供了丰富的功能,包括支持多种图表类型、数据点标记、坐标轴刻度、自定义样式等。

绘图表

Plottables 是在 QCustomPlot 中显示任何类型的数据的类。它们都派生自 QCPAbstractPlottable。例如,QCPGraph 是一个绘图表,它显示具有不同线条样式、散点样式、填充等的图形。

由于绘制图形是一个如此主要的用例,QCustomPlot 有一个特殊的接口用于处理 QCPGraph 绘图表,这使得处理它们变得非常容易:
可以使用 QCustomPlot::addGraph 创建新图形,并使用 QCustomPlot::graph 访问。

对于所有其他 plottable,使用正常的 plottable 接口:首先,创建相应 plottable 的实例并将其添加到 QCustomPlot,例如

QCPCurve *newCurve = QCPCurve(customPlot->xAxis, customPlot->yAxis);

然后,可以通过指针访问新创建的 plottable 的属性。newCurve

绘图表(包括图形)可以通过 QCustomPlot::p lottable 进行检索。由于该函数的返回类型是所有 plottables 的抽象基类 QCPAbstractPlottable,因此您可能希望返回指向相应 plottable 子类的指针。像往常一样,如果绘图表不属于该特定子类,则演员表将返回。qobject_castnullptr

所有与绘图表的进一步接口(例如,如何设置数据)都特定于绘图表类型。请参阅子类的文档:QCPGraphQCPCurveQCPBarsQCPStatisticalBoxQCPColorMapQCPFinancial

控制轴

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() 访问主轴矩形。QCPAxisRect 和 QCPAxis 文档中提供了不同边距/填充/偏移选项的详细说明。

剧情图例

默认情况下,每个 QCustomPlot 都有一个 QCPLegend(作为 QCustomPlot::legend)。图例是绘图中的一个小布局元素,它列出了绘图表,其中包含可绘图行/符号的图标和名称 (QCPAbstractPlottable::setName)。可以通过 QCPAbstractPlottable::addToLegend 和 QCPAbstractPlottable::removeFromLegend 在图例中添加和删除 Plottable。默认情况下,向 QCustomPlot 添加 plottable 也会自动将其添加到图例中。可以使用 QCustomPlot::setAutoAddPlottableToLegend 属性更改此行为。

QCPLegend 也提供了一个接口,可以直接访问、添加和删除图例项。请参阅 QCPLegend::itemQCPLegend::itemWithPlottableQCPLegend::addItemQCPLegend::removeItem 示例。

布局系统支持多个图例(因为 QCPLegend 是普通布局元素)。

用户交互

QCustomPlot 支持使用鼠标拖动轴范围 (QCPAxisRect::setRangeDrag)、使用鼠标滚轮缩放轴范围 (QCPAxisRect::setRangeZoom) 以及完整的选择机制,可配置细化到数据点和数据范围。

这些交互的可用性通过 QCustomPlot::setInteractions 进行控制。有关交互系统的详细信息,请参阅那里的文档。数据选择在专用的数据选择机制页面上进行了详细讨论。

此外,当对象被点击或双击时,QCustomPlot 总是发出相应的信号。例如,请参见 QCustomPlot::p lottableClickQCustomPlot::p lottableDoubleClick 和 QCustomPlot::axisClick

最后,在最低级别,您可以在自己的子类中使用 QCPLayerable 鼠标事件虚拟方法,QCustomPlot 实例在受影响的可分层对象上调用该方法。

装饰品及辅助物品

除了可绘图对象之外,还有另一类重要的绘图对象:项目。所有项的基类都是 QCPAbstractItem。项目与可绘图表的不同之处在于,它不一定绑定到任何轴。这意味着它也可以放置在绝对像素坐标中,或放置在轴矩形的相对位置。此外,它通常不直接表示数据,而是充当装饰、强调、描述等。

可以在父-子-层次结构中安排多个项目,从而允许动态行为。例如,您可以将箭头的头部放置在固定的绘图坐标处,以便它始终指向绘图中的某个重要区域。箭头的尾部可以锚定到文本项,该文本项始终位于轴矩形的顶部中心,与用户拖动轴范围的位置无关。这样,箭头可以拉伸和旋转,因此它始终从标签指向指定的绘图坐标,而无需任何进一步的代码。

有关更详细的介绍,请参阅 QCPAbstractItem 文档,并从那里查看各个标准项的文档,以了解如何使用它们。

布局元素和布局

QCustomPlot 使用内部布局系统来提供对象的动态大小调整和定位,例如轴矩形、图例、色阶和其他布局元素。它们都基于 QCPLayoutElement,并通过将它们放在 QCPLayout 子类(如 QCPLayoutGrid)中来排列。

有关详细信息,请参阅有关布局系统的页面。

OpenGL 加速绘图和性能改进

QCustomPlot 具有多个 OpenGL 后端,可在所有受支持的 Qt 版本上提供 OpenGL 硬件加速绘图。如果计算机支持 OpenGL,则可以通过在相应的 QCustomPlot 实例上使用 setOpenGl(true) 进行编译并调用来启用它。该方法的文档中提供了更多详细信息。QCUSTOMPLOT_USE_OPENGL

有关在要求苛刻的可视化任务中最大限度地提高绘图性能的信息,可以在有关绘图性能改进的专用页面上找到。

预处理器定义标志

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 值时,它们将给出 qDebug 输出(如果故意使用无声 NaN 在图形中创建间隙也是如此)。

### 特点

- **多种图表类型**:折线图、柱状图、散点图、曲线图、饼图等。
- **自定义样式**:可以自定义图表的颜色、线型、标记等。
- **高性能**:适用于实时数据更新和大数据集。
- **易用性**:简单的 API 设计,使得用户可以快速创建和修改图表。

### 使用步骤

以下是如何在 Qt 项目中使用 `QCustomPlot` 的基本步骤:

1. **安装 QCustomPlot**

   - 访问 [QCustomPlot 官网](https://www.qcustomplot.com/) 下载最新版本的 `QCustomPlot` 库。
   - 将下载的 `qcustomplot.h` 和 `qcustomplot.cpp` 文件添加到您的 Qt 项目中。

2. **配置项目文件**

   在您的 Qt 项目的 `.pro` 文件中,添加以下内容以包含 `QCustomPlot` 的头文件和源文件:

   ```pro
   HEADERS += path/to/qcustomplot.h
   SOURCES += path/to/qcustomplot.cpp
   ```

3. **使用 QCustomPlot**

   在 Qt 的主窗口或者其他 Qt Widget 中使用 `QCustomPlot` 组件。下面是一个简单的示例,展示了如何在 Qt 的窗口中创建一个基本的折线图。 

 ```cpp
   // mainwindow.cpp
   #include "mainwindow.h"
   #include "ui_mainwindow.h"
   #include "qcustomplot.h"

   MainWindow::MainWindow(QWidget *parent) :
       QMainWindow(parent),
       ui(new Ui::MainWindow)
   {
       ui->setupUi(this);

       // 创建一个 QCustomPlot 实例
       QCustomPlot *customPlot = new QCustomPlot(this);
       setCentralWidget(customPlot);

       // 添加折线图
       QCPGraph *graph = customPlot->addGraph();
       graph->setName("Sample Data");

       // 添加数据
       QVector<double> xData(101), yData(101);
       for (int i = 0; i < 101; ++i)
       {
           xData[i] = i / 50.0 - 1;  // X 数据
           yData[i] = xData[i] * xData[i];  // Y 数据
       }
       graph->setData(xData, yData);

       // 设置坐标轴标签
       customPlot->xAxis->setLabel("X Axis");
       customPlot->yAxis->setLabel("Y Axis");

       // 自动缩放
       customPlot->rescaleAxes();
   }

   MainWindow::~MainWindow()
   {
       delete ui;
   }
   ```

   ```cpp
   // mainwindow.h
   #ifndef MAINWINDOW_H
   #define MAINWINDOW_H

   #include <QMainWindow>
   #include "qcustomplot.h"

   namespace Ui {
   class MainWindow;
   }

   class MainWindow : public QMainWindow
   {
       Q_OBJECT

   public:
       explicit MainWindow(QWidget *parent = nullptr);
       ~MainWindow();

   private:
       Ui::MainWindow *ui;
   };

   #endif // MAINWINDOW_H
   ```

4. **自定义和扩展**

   `QCustomPlot` 提供了丰富的接口和功能来进一步自定义和扩展图表。例如,可以添加多个图表、修改颜色、设置图例、处理鼠标事件等。可以参考 [QCustomPlot 的官方文档](https://www.qcustomplot.com/documentation/) 获取更多详细信息和示例代码。

### 总结

`QCustomPlot` 是一个功能强大且灵活的 Qt 图表库,适合需要高度自定义和高性能图表的应用程序。通过简单的配置和代码编写,您可以轻松地在 Qt 项目中创建和展示各种图表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值