Qt技巧笔记(十一):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在打印或导出图表时需要用到它。makefile# 如果使用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文件中,需要进行额外配置来告诉项目去哪找头文件和库文件。makefile# ... 其他配置 ... # 定义使用库 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
C++
// 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
C++
#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)
{
QVector<double> 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); // 显示图例
}