首页 综合 > 正文

【QCustomPlot】使用方法(动态库方式)

2023-06-19 09:00:35 来源:博客园
说明

使用 QCustomPlot 绘图库辅助开发时整理的学习笔记。同系列文章目录可见 《绘图库 QCustomPlot 学习笔记》目录。本篇介绍 QCustomPlot 的一种使用方法,通过动态库的方式进行使用,示例中使用的 QCustomPlot 版本为 Version 2.1.1

目录说明1. 下载源码2. 编译动态库2.1 编译动态库的工程文件 .pro2.2 整理编译目录2.3 编译出动态库3. 使用动态库3.1 在使用工程文件 .pro 中添加代码3.2 使用注意事项3.3 使用示例代码1. 下载源码

详见本人另一篇博客 【QCustomPlot】下载,下载 QCustomPlot-sharedlib.tar.gz动态库版的压缩包,解压后里面有个 readme.txt文件,介绍了如何编译 QCustomPlot动态库以及如何使用编译出来的动态库,本篇博客将以此为参考,介绍如何通过动态库的方式使用 QCustomPlot 绘图库。编译动态库时,需使用到 qcustomplot.hqcustomplot.cpp两个文件。使用动态库时,需把 qcustomplot.h文件及动态库放在编译器能找到的地方,并在相关文件中通过 #include的方式包含该头文件,而不能在 pro/pri文件中通过 HEADERS +=的方式包含 qcustomplot.h,否则会报错。

2. 编译动态库

编译动态库时,需三个文件:pro文件、qcustomplot.hqcustomplot.cpp源码文件。


(资料图片)

2.1 编译动态库的工程文件 .pro

pro文件用于设定动态库的编译方式及相关信息,新建一个 txt文本文件,将以下代码拷贝进去,然后更改 .txt后缀名为 .pro,就得到了所需的工程文件,不妨将该工程文件命名为 sharedlib-compilation.pro

QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupportgreaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11DEFINES += QCUSTOMPLOT_COMPILE_LIBRARYTEMPLATE = libCONFIG += debug_and_release build_allstatic {  CONFIG += static} else {  CONFIG += shared}VERSION = 2.1.1TARGET = qcustomplotCONFIG(debug, debug|release) {  TARGET = $$join(TARGET,,,d)  QMAKE_TARGET_PRODUCT = "QCustomPlot (debug mode)"  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt (debug mode)"} else {  QMAKE_TARGET_PRODUCT = "QCustomPlot"  QMAKE_TARGET_DESCRIPTION = "Plotting library for Qt"}QMAKE_TARGET_COMPANY = "www.qcustomplot.com"QMAKE_TARGET_COPYRIGHT = "Copyright (C) by Emanuel Eichhammer"SOURCES += qcustomplot.cppHEADERS += qcustomplot.h
2.2 整理编译目录

将上面的 sharedlib-compilation.proqcustomplot.hqcustomplot.cpp三个文件放在同一个文件夹下。

2.3 编译出动态库

使用 Qt Creator 打开 sharedlib-compilation.pro文件,选择合适的编译器,这个编译器必须与后面使用动态库时的编译器一样,比如都为 MSVC2015 64bit。(编译时选择 Debug模式或者 Release模式都可以,不影响最后的使用,因为 .pro文件里面有设置,不管是哪种模式,最后两种版本都会生成。)

点击左下角这个锤子图标,编译动态库,等待编译。

编译完成后,会在构建目录下生成动态库,我的构建目录为(因人而异):

E:\Cworkspace\Qt 5.9\QtDemo\build-sharedlib-compilation-Desktop_Qt_5_9_2_MSVC2015_64bit-Debug

该目录的 debugrelease子目录下分别有对应版本的动态库,使用时只需要 .lib以及 .dll文件(不同平台编译器的生成结果会有差异)。

3. 使用动态库

使用动态库时,需把以下三个文件放在编译器能找到的地方:上一步生成的 .lib以及 .dll文件(不同平台编译器的生成结果会有差异,但都是一个静态库文件和一个动态库文件)、qcustomplot.h文件。同样以 MSVC2015 64bit为例。

3.1 在使用工程文件 .pro 中添加代码

在使用动态库的 .pro工程文件中添加以下代码(库的路径因人而异,下面假设动态库放在了 .pro文件同级目录下):

greaterThan(QT_MAJOR_VERSION, 4): QT += printsupportgreaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11    # Tell the qcustomplot header that it will be used as library:DEFINES += QCUSTOMPLOT_USE_LIBRARY# Link with debug version of qcustomplot if compiling in debug mode, else with release library:CONFIG(debug, release|debug) {  win32:QCPLIB = qcustomplotd2  else: QCPLIB = qcustomplotd} else {  win32:QCPLIB = qcustomplot2  else: QCPLIB = qcustomplot}LIBS += -L$$PWD -l$$QCPLIB

若使用 MinGW编译器,生成的静态库文件名字前面可能多了 lib三个字母,包含时需对名字做对应修改:

# Link with debug version of qcustomplot if compiling in debug mode, else with release library:CONFIG(debug, release|debug) {  win32:QCPLIB = libqcustomplotd2  else: QCPLIB = libqcustomplotd} else {  win32:QCPLIB = libqcustomplot2  else: QCPLIB = libqcustomplot}LIBS += -L$$PWD -l$$QCPLIB

添加以上代码后,就可以按正常方式使用 QCustomPlot 绘图库了。

3.2 使用注意事项

通过动态库的方式进行使用时,需注意以下几点:

编译动态库时的编译器版本必须和使用动态库时的编译器版本保持一致。生成的动态库文件、静态库文件、qcustomplot.h文件必须放在编译器能找到的地方,比如 .pro文件所在目录、生成目录。不能使用 HEADERS +=的方式在 .pro文件中包含 qcustomplot.h,只能通过 #include的方式在相关文件中包含该头文件。3.3 使用示例代码

工程文件(sharedlib-usage.pro)代码如下,其中的库由 MSVC2015 64bit编译器生成:

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupportTARGET = sharedlib-usageTEMPLATE = appgreaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11# Tell the qcustomplot header that it will be used as library:DEFINES += QCUSTOMPLOT_USE_LIBRARY# Link with debug version of qcustomplot if compiling in debug mode, else with release library:CONFIG(debug, release|debug) {  win32:QCPLIB = qcustomplotd2  else: QCPLIB = qcustomplotd} else {  win32:QCPLIB = qcustomplot2  else: QCPLIB = qcustomplot}LIBS += -L$$PWD -l$$QCPLIBSOURCES += \        main.cpp

主函数文件(main.cpp)代码如下:

#include #include #include "qcustomplot.h"int main(int argc, char *argv[]){    QApplication a(argc, argv);    QMainWindow window;    // setup customPlot as central widget of window:    QCustomPlot customPlot;    window.setCentralWidget(&customPlot);    // create plot (from quadratic plot example):    QVector 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();    window.setGeometry(100, 100, 500, 400);    window.show();    return a.exec();}

工程目录结构如下:

标签:
x 广告
x 广告

Copyright ?  2015-2022 华东体育网版权所有  备案号:京ICP备2022016840号-41   联系邮箱:2 913 236 @qq.com