如何将QCustomPlot编译成动态库并使用


如何将 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.cppqcustomplot.h 也放入其中,文件层级如下所示:

在这里插入图片描述

至此我们准备工作结束。

三、编译动态库

  1. 通过上述步骤后,我们打开其中的 ...\qcustomplot-sharedlib\sharedlib-compilation 中的 sharedlib-compilation.pro 文件。进入 Qt 后选择编译环境,我这里以 MinGW 64-bit 为例:

    在这里插入图片描述

    如果想编译成其他环境的动态库,选用不同编译环境即可!!!

  2. 打开后结构如下所示:

    在这里插入图片描述

  3. 然后我们进行构建即可,这里构建可以选择 DebugRelease 两种方式,对应的也是两种方式下的动态库。

    在这里插入图片描述

如上所示,点击图中的小锤子,等待构建完成即可!!!

这里我分别用 DebugRelease 两种方式进行构建,得到的文件如下所示:

在这里插入图片描述

注意:图中的是从 build...... 目录开始的。

如下所示为两个目录:

在这里插入图片描述

其中,关键的是两个 .dll 文件和两个 .a 文件Debug 产生的文件命名中带有字母 d,注意区分。

至此,我们就完成了动态库的编译。接下来会教大家如何使用。

四、使用动态库——示例工程

我这里用官方给出的示例文件进行演示,要配置到自己的项目中步骤均一致。

官方示例文件在刚才我们解压的目录中,路径为 ...\qcustomplot-sharedlib\sharedlib-usage,打开其中的 sharedlib-usage.pro 文件,同样的,初次打开需要配置编译环境,需要与我们编译动态库的环境一致,否则无法使用!!!。

由于我编译动态库采用的是 MinGW 64-bit 所以这里依旧采用这个环境打开示例文件。

然后我们需要在刚才 .pro 所在的文件中新建文件夹用于存放动态库文件,我这里新建文件夹为 QCustomPlot 作为演示,放入我们编译好的 .a.dll 文件(我上述分别编译了 debugrelease 文件,所以将其都放在里面),如下所示:

在这里插入图片描述

  1. 我们回到 Qt 中,在项目文件执行 右键 -> 添加库 操作,如下所示:

    在这里插入图片描述

  2. 选择 外部库 后点击 下一步

    在这里插入图片描述

  3. 找到我们刚才复制的库文件并添加(选中名称中不含字母 d 的):

    在这里插入图片描述

  4. 然后点击 完成 后,需要我们点击 .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
    
  5. 然后我们就可以编译运行,采用 DebugRelase 的方式均可正确运行,如下所示:

    在这里插入图片描述

至此,我们使用动态库到此结束!大家在自己的工程中也可采用这种方式进行导入。

五、使用动态库——自建工程

  1. 在自建的工程中,首先我们还是新建文件放入 .a.dll 文件,除此之外,还要加入 .h 文件,如下所示:

    在这里插入图片描述

    .h 文件在之前我们下载的第二个压缩包中有。

  2. 依旧按照上述步骤添加库文件到工程(别忘了还要在 .pro 文件中修改后缀),如下所示:

    在这里插入图片描述

  3. 还要在 .pro 文件中添加以下内容:

    QT       += printsupport
        
    DEFINES += QCUSTOMPLOT_USE_LIBRARY
    
  4. 之后在 .h 中引入文件,这里我使用工程命名的是 comstruct,所以在 comstruct.h 中添加:

    在这里插入图片描述

  5. .ui 文件中绘制一个 widget 将其提升为 QCustomPlot,这里不会的可以自行百度一下叙述起来比较复杂

    在这里插入图片描述

    这里我还是要对萌新朋友说一句,正常来讲,你的右键之后的提升为是不会直接显示的,需要自己点击下面那个 提升为... 进行添加,这还是提升控件的操作,如果有异议,建议自行百度,篇幅有限,我就不在这里赘述了。

  6. 将其命名为 customPlot,如下所示:

    在这里插入图片描述

  7. 然后编写代码,我这里给出示例(我工程名是 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;
    }
    
  8. 然后直接运行即可,无论是采用 debugrelease 方式均可成功运行:

    在这里插入图片描述

图中效果主要是为了演示 QCustomPlot 的使用,我在此工程中还加入了别的控件代码,这部分我没有提及,大家跟着步骤进行就好了,主要掌握如何使用该控件即可。

参考文章:

六、写在最后

本文介绍了 如何在Qt中自己编译 QCustomPlot 动态库 并 在项目中使用的方法

欢迎广大读者提出问题以及修改意见,本人看到后会给予回应,欢迎留言,后续会逐步进行开源!!!
另外,由于文章是作者手打的文字,有些地方可能文字会出错,望谅解,也可私信联系我,我对其进行更改。

  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值