如何将 QCustomPlot 编译成动态库并使用
一、简介
QCustomPlot
是一个 qt
画图类,一般主要用于波形图绘制,其可以导出为多种格式。而其使用也很简单,只需要在项目中导入相应的 .cpp
和 .h
文件即可。
以下是其能够绘制的示例:
以上图片均来自官网: Qt Plotting Widget QCustomPlot - Introduction
如点击无法进行跳转,可自行复制跳转:https://www.qcustomplot.com/index.php/introduction
而本文主要内容是将其源文件编译为动态库,以提供给我们项目使用。
开发环境:
- Windows x64
- Qt 5.12.3
- QCustomPlot 2.1.1
二、准备工作
首先需要下载其源文件,我们编译成动态库只需图中所示的两个文件:
下载地址:Qt Plotting Widget QCustomPlot - Download
下载完成后我们需要新建一个文件夹(注意文件路径中不要包含中文字符),我这里新建文件夹为 QCutomPlot
。
然后将下载好的 QCustomplot-sharedlib.tar.gz
解压到该文件中,并且将 QCustomPlot-source.tar.gz
中的 qcustomplot.cpp
和 qcustomplot.h
也放入其中,文件层级如下所示:
至此我们准备工作结束。
三、编译动态库
-
通过上述步骤后,我们打开其中的
...\qcustomplot-sharedlib\sharedlib-compilation
中的sharedlib-compilation.pro
文件。进入 Qt 后选择编译环境,我这里以MinGW 64-bit
为例:如果想编译成其他环境的动态库,选用不同编译环境即可!!!
-
打开后结构如下所示:
-
然后我们进行构建即可,这里构建可以选择
Debug
和Release
两种方式,对应的也是两种方式下的动态库。
如上所示,点击图中的小锤子,等待构建完成即可!!!
这里我分别用 Debug
和 Release
两种方式进行构建,得到的文件如下所示:
注意:图中的是从
build......
目录开始的。
如下所示为两个目录:
其中,关键的是两个 .dll
文件和两个 .a
文件。Debug
产生的文件命名中带有字母 d
,注意区分。
至此,我们就完成了动态库的编译。接下来会教大家如何使用。
四、使用动态库——示例工程
我这里用官方给出的示例文件进行演示,要配置到自己的项目中步骤均一致。
官方示例文件在刚才我们解压的目录中,路径为 ...\qcustomplot-sharedlib\sharedlib-usage
,打开其中的 sharedlib-usage.pro
文件,同样的,初次打开需要配置编译环境,需要与我们编译动态库的环境一致,否则无法使用!!!。
由于我编译动态库采用的是 MinGW 64-bit
所以这里依旧采用这个环境打开示例文件。
然后我们需要在刚才 .pro
所在的文件中新建文件夹用于存放动态库文件,我这里新建文件夹为 QCustomPlot
作为演示,放入我们编译好的 .a
和 .dll
文件(我上述分别编译了 debug
和 release
文件,所以将其都放在里面),如下所示:
-
我们回到
Qt
中,在项目文件执行右键 -> 添加库
操作,如下所示: -
选择 外部库 后点击 下一步:
-
找到我们刚才复制的库文件并添加(选中名称中不含字母
d
的): -
然后点击 完成 后,需要我们点击
.pro
文件,修改刚才添加的内容,一般都在该文件的末尾,该步骤实际上是默认把字母d
加在名字末尾,而实际上我们的d
不在末尾,如下所示:win32:CONFIG(release, debug|release): LIBS += -L$$PWD/QCustomPlot/ -lqcustomplot2 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/QCustomPlot/ -lqcustomplotd2 #原本是 LIBS += -L$$PWD/QCustomPlot/Lib/ -lqcustomplot2d 上述已经修改过,注意区分 INCLUDEPATH += $$PWD/QCustomPlot DEPENDPATH += $$PWD/QCustomPlot
-
然后我们就可以编译运行,采用
Debug
或Relase
的方式均可正确运行,如下所示:
至此,我们使用动态库到此结束!大家在自己的工程中也可采用这种方式进行导入。
五、使用动态库——自建工程
-
在自建的工程中,首先我们还是新建文件放入
.a
和.dll
文件,除此之外,还要加入.h
文件,如下所示:.h
文件在之前我们下载的第二个压缩包中有。 -
依旧按照上述步骤添加库文件到工程(别忘了还要在
.pro
文件中修改后缀),如下所示: -
还要在
.pro
文件中添加以下内容:QT += printsupport DEFINES += QCUSTOMPLOT_USE_LIBRARY
-
之后在
.h
中引入文件,这里我使用工程命名的是comstruct
,所以在comstruct.h
中添加: -
在
.ui
文件中绘制一个widget
将其提升为QCustomPlot
,这里不会的可以自行百度一下叙述起来比较复杂这里我还是要对萌新朋友说一句,正常来讲,你的右键之后的提升为是不会直接显示的,需要自己点击下面那个
提升为...
进行添加,这还是提升控件的操作,如果有异议,建议自行百度,篇幅有限,我就不在这里赘述了。 -
将其命名为
customPlot
,如下所示: -
然后编写代码,我这里给出示例(我工程名是
ComStruct
,一般情况下,有可能是Widget
或其他):#include "comstruct.h" #include "ui_comstruct.h" ComStruct::ComStruct(QWidget *parent) : QWidget(parent), ui(new Ui::ComStruct) { ui->setupUi(this); QCustomPlot *customPlot = ui->customPlot; QVector<double> x(101), y(101); for (int i=0; i<101; ++i) { x[i] = i/50.0 - 1; y[i] = x[i]*x[i]; } customPlot->addGraph(); customPlot->graph(0)->setData(x, y); customPlot->xAxis->setLabel("x"); customPlot->yAxis->setLabel("y"); customPlot->rescaleAxes(); } ComStruct::~ComStruct() { delete ui; }
-
然后直接运行即可,无论是采用
debug
或release
方式均可成功运行:
图中效果主要是为了演示 QCustomPlot
的使用,我在此工程中还加入了别的控件代码,这部分我没有提及,大家跟着步骤进行就好了,主要掌握如何使用该控件即可。
参考文章:
六、写在最后
本文介绍了 如何在Qt中自己编译 QCustomPlot 动态库 并 在项目中使用的方法。
欢迎广大读者提出问题以及修改意见,本人看到后会给予回应,欢迎留言,后续会逐步进行开源!!!
另外,由于文章是作者手打的文字,有些地方可能文字会出错,望谅解,也可私信联系我,我对其进行更改。
-
个人CSDN账号:刘梓谦_-CSDN博客
-
GitHub:Jiahao-Liu29 (github.com)