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

更新于:2023-06-19

说明使用 QCustomPlot 绘图库辅助开发时整理的学习笔记。同系列文章目录可见 《绘图库 QCustomPlot 学习笔记》目录。本篇介绍 QCustomPlot 的一种使用方法,通过动态库的方式进行使用,示例中使用的 QCustomPlot 版本为 Version 2.1.1。目录说明1. 下载源码2. 编译动态库2.1 编译动态库的工程文件 .pro2.2 整理编译目录2.3 编译出动态

说明

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


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 gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11

DEFINES += QCUSTOMPLOT_COMPILE_LIBRARY
TEMPLATE = lib
CONFIG += debug_and_release build_all
static {
  CONFIG += static
} else {
  CONFIG += shared
}

VERSION = 2.1.1

TARGET = qcustomplot
CONFIG(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.cpp
HEADERS += qcustomplot.h

2.2 整理编译目录

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

2.3 编译出动态库

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

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

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

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

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

3. 使用动态库

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

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

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

greaterThan(QT_MAJOR_VERSION, 4): QT += printsupport

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(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 gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport

TARGET = sharedlib-usage
TEMPLATE = app

greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(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

SOURCES += \
        main.cpp

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

#include <QApplication>
#include <QMainWindow>
#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<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();

    window.setGeometry(100, 100, 500, 400);
    window.show();

    return a.exec();
}

工程目录结构如下:

Oh Shit!-图片走丢了-打个广告-欢迎来博客园关注“木三百川”

相关文档

推荐软件

网络调试专用工具GET/POST支持HTTPS 支持自定义请求头和POST数据
九戒网络助手

网络调试专用工具GET/POST支持HTTPS 支持自定义请求头和POST数据

直接下载

一键屏幕取色工具绿色版 网页取色建站必备神器
屏幕取色器

一键屏幕取色工具绿色版 网页取色建站必备神器

直接下载

高性能快速去除TXT文件中的重复文本行,支持两个文本合并后去重
TXT合并去重工具

高性能快速去除TXT文件中的重复文本行,支持两个文本合并后去重

直接下载

一键批量采集关键词,长尾词,下拉词,相关搜搜词
关键词采集器 [相关/下拉/长尾]

一键批量采集关键词,长尾词,下拉词,相关搜搜词

直接下载

TDK一键采集网站标题/关键词/描述支持unicode解码
网站TDK采集器

TDK一键采集网站标题/关键词/描述支持unicode解码

直接下载

多线程批量扫描指定服务器开放了哪些端口
批量端口扫描工具

多线程批量扫描指定服务器开放了哪些端口

直接下载

输入关键词批量搜索网站,支持导出为txt和excel表格,支持导出TDK
关键词网站域名采集器

输入关键词批量搜索网站,支持导出为txt和excel表格,支持导出TDK

直接下载

域名采集器,高速有效域名网址采集工具
域名采集器

域名采集器,高速有效域名网址采集工具

直接下载

站群推广利器SEO自动外链引蜘蛛工具
SEO自动外链工具

站群推广利器SEO自动外链引蜘蛛工具

直接下载

网址访问状态检查,网站漏洞扫描文件目录扫描
网址批量验证器

网址访问状态检查,网站漏洞扫描文件目录扫描

直接下载

批量将网址中的占位符替换成URL编码的关键词,保存导出最终网址列表
网址关键词合并工具

批量将网址中的占位符替换成URL编码的关键词,保存导出最终网址列表

查看详情

网站统计平台广告引流工具CNZZ/51.LA/百度统计通用
网站统计平台广告引流

网站统计平台广告引流工具CNZZ/51.LA/百度统计通用

查看详情

百度网盘批量分享工具,一键自动分享文件记录链接和密码
百度网盘批量分享

百度网盘批量分享工具,一键自动分享文件记录链接和密码

查看详情

Excel表格导入织梦文章,支持自定义模型和字段
Excel导入织梦系统

Excel表格导入织梦文章,支持自定义模型和字段

查看详情

txt文档批量导入织梦CMS文章工具
txt导入织梦文章

txt文档批量导入织梦CMS文章工具

查看详情

WORD文档带图片和格式发布到织梦CMS文章
WORD文档导入织梦

WORD文档带图片和格式发布到织梦CMS文章

查看详情

推荐专题