QCustomPlot图表绘制库配置与示例
1. QCustomPlot图表库介绍QCustomPlot是一个基于Qt框架的开源图标绘制库用于绘制各种类型的二维图表和科学可视化。它提供了丰富的提供绘图功能和灵活的定制选项使用开发者能够轻松创建交互式和高度可定制的图标。以下是一些QCustomplot库的特点和功能多种图标类型QCustomPlot支持绘制各种常见的二维图表类型包括散点图、线图、柱状图、饼图、等值线图等。你可以根据数据的特点选择合适的图表类型。数据可视化该库提供了丰富的功能可视化科学数据。可以通过绘制数据点、曲线、颜色映射色标和等值线图等。交互式操作QCustomPlot支持交互式操作允许用户通过鼠标与图表进行交互。你可以缩放、平移、选择数据点、显示工具提示等以便用户对图表进行探索和分析。定制选项该库提供了丰富的定制选项可以根据需要调整图表的外观和行为。你可以设置轴的刻度、标签和范围选择图例的位置和样式自定义绘图元素的样式和颜色等。轻量级和易于集成QCustomPlot是一个轻量级的库易于集成到现有的Qt应用程序中。它只依赖于Qt库本身没有其他外部依赖使得它成为一个方便和灵活的选择。2.环境安装与配置QCustomPlot的安装与配置非常灵活主要有两种方式直接集成源码最简单常用和编译为动态库便于多项目共享。 以下是基于官方指南和常见实践的操作步骤你可以在阅读过程中根据自己的需求比如是刚开始学习还是想为多个项目搭建统一环境来重点关注对应的部分。方法一直接集成源码最简单、最常用 这种方式是将库的源代码直接添加到你的项目中与项目一起编译。合适大多数初学者和中小型项目。下载源代码文件访问QCustomPlot官方网站的下面的 下载页面下载最新的QCustomPlot.tar.gz压缩包。解压后你会得到两个核心文件qcustomplot.h和qustomplot.cpp。将文件添加到Qt项目将上述两个文件复制到你的项目目录下。在Qt Creator和VS2022右键点击项目的根目录选择“添加现有文件...” (Add Existing Files...)然后选中刚才复制过来的qcustomplot.h和qcustomplot.cpp。添加后你的项目结构树中会显示这两个文件同时项目文件.pro中也会自动添加相应的HEADERS和SOURCES条目。修改项目文件.pro打开项目的.pro文件找到QT变量确保添加了printsupport模块。这是因为QCustomPlot在打印或导出图表时需要用到它。# 如果使用Qt5及以上版本需要加上 printsupport greaterThan(QT_MAJOR_VERSION, 4): QT widgets printsupport在界面中使用提升法这是官方推荐的在Qt Designer中使用QCustomPlot的方法。打开mainwindow.ui或widget.h文件从显示部件列表中拖拽一个QWidget到窗口上你想放置图表的位置。右键点击这个刚放置的QWidget选择“提升为...”Promote to...。在弹出的对话框“提升的类名称”Promoted class name输入QCustomPlot。“头文件”Header file会自动提升为qcustomplot.h如果不对可以手动修改。然后点击“添加” (Add)再点击“提升” (Promote)。完成后这个控件就变成QCustomPlot图表控件。虽然在设计界面没什么变化但运行时就会显示一个带有坐标轴和网格线的空白图表。方法二编译为动态库适合多个项目共享如果你需要在多个Qt项目中重复使用QCustomPlot将其编译成一个单独的库文件.dll或.so会更方便无需在每个项目里都重复编译源码。获取并准备共享库项目从官网下载QCustomPlot-sharedlib.tar.gz并解压。进入其中的sharedlib-compilation目录你会看到一个.pro项目文件这是官方准备好的用于编译动态库的项目。放置源码并编译将之前下载的qcustomplot.h和qcustomplot.cpp复制到sharedlib-compilation目录下。然后用 Qt Creator 打开该目录下的.pro文件直接编译即可。编译成功后你会在debug和release目录下得到库文件例如在Windows上是qcustomplotd2.dll调试版和qcustomplot2.dll发布版。在自己的项目中使用库新建一个文件夹如thirdPart将生成的.dll或.so文件和qcustomplot.h头文件放进去。在你的项目.pro文件中需要进行额外配置来告诉项目去哪找头文件和库文件。# ... 其他配置 ... # 定义使用库 DEFINES QCUSTOMPLOT_USE_LIBRARY # 指定头文件路径 INCLUDEPATH ../thirdPart # 根据编译模式链接对应的库文件 CONFIG(debug, release|debug){ win32:QCPLIB qcustomplotd2 else: QCPLIB qcustomplotd } else { win32:QCPLIB qcustomplot2 else: QCPLIB qcustomplot } LIBS -L../thirdPart -l$$QCPLIB # ... 其他配置 ...完成这些后你就可以像方式一样在UI界面中使用提升法来使用QCustomPlot了。3.应用示例基本绘图示例其头文件mainwindow.h// mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include QMainWindow #include qcustomplot.h namespace Ui { class MainWindow; } class QCustomPlot; class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent nullptr); ~MainWindow(); void setupQuadraticDemo(QCustomPlot *customPlot); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H其源文件mainwindow.cpp#include mainwindow.h #include ui_mainwindow.h MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui-setupUi(this); QCustomPlot* customPlot new QCustomPlot; setCentralWidget(customPlot); setupQuadraticDemo(customPlot); } MainWindow::~MainWindow() { delete ui; } void MainWindow::setupQuadraticDemo(QCustomPlot *customPlot) { QVectordouble x(101), y(101); for (int i 0; i 101; i) { x[i] i / 50.0 - 1; // -1 到 1 y[i] x[i] * x[i]; } customPlot-addGraph(); // 添加一个曲线图QGraph customPlot-graph(0)-setData(x, y); // 为曲线图添加数据 customPlot-graph(0)-setName(QString::fromLocal8Bit(customplot_quadratic_demo)); // 设置曲线图的名字 customPlot-xAxis-setLabel(x); // 设置x和y轴的标签 customPlot-yAxis-setLabel(y); customPlot-xAxis-setRange(-1, 1); // 设置x轴的范围为(-1,1) customPlot-yAxis-setRange(0, 1); customPlot-legend-setVisible(true); // 显示图例 }