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

这篇具有很好参考价值的文章主要介绍了【QCustomPlot】使用方法(动态库方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

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

目录
  • 说明
  • 1. 下载源码
  • 2. 编译动态库
    • 2.1 编译动态库的工程文件 .pro
    • 2.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 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 三个文件放在同一个文件夹下。

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

2.3 编译出动态库

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

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

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

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

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

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

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

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

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

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();
}

工程目录结构如下:

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

绘制结果:

【QCustomPlot】使用方法(动态库方式)文章来源地址https://www.toymoban.com/news/detail-489729.html

到了这里,关于【QCustomPlot】使用方法(动态库方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RedisTemplet opsForHash中方法使用说明

    opsForHash主要用于操作Redis的hash的,使用方式:redisTemplate.opsForHash().方法名,比如 以下各方法皆来自于Redis的命令,命令详细介绍参考https://blog.csdn.net/ppjsyw/article/details/125087623 相关命令 hset key field value 方法 参数说明 key:键名 hashKey:字段名 value:值 示例 相关命令 hset key field value [fie

    2024年02月01日
    浏览(35)
  • Git&GitHub的使用方法及具体的介绍说明

    GitGitHub 1 版本控制工具应该具备的功能 协同修改 多人并行不悖的修改服务器端的同一个文件。 数据备份 不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。 版本管理 在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空间,提高运

    2024年02月04日
    浏览(43)
  • MybatisPlus之QueryWrapper有无条件方法的使用说明

    QueryWrapper 两种重载方法,其中一种是布尔类型condition条件参数,另一种是没有布尔类型参数,比如下面这两个方法: 它们有什么区别呢? 鄙人细研究了一番,得出如下结论: boolean condition:用于指定当前这个条件是否有效;如果为 true,则使用当前条件;如果为 false,则忽

    2024年02月12日
    浏览(39)
  • FANUC机器人加减速倍率指令ACC的使用方法说明

    单位有一台FANUC机器人(型号:M-900iB 360kg),偶尔会在启动的瞬间会报SRVO-050碰撞检测报警,而事实上机器人并没有开始移动或和其他工件产生碰撞,一直查了很长时间,也没有查到具体的原因,也尝试过重新进行负载推算,但是偶尔还是会出现SRVO-050的报警。 关于SRVO-050 碰

    2024年02月12日
    浏览(138)
  • 史上最全OpenCV常用方法及使用说明汇总,建议收藏!

    前言 : Hello大家好,我是小哥谈。 计算机视觉的基础首先是处理图像、视频这些非结构化的数据,而图像处理库比较常用和强大的有PIL、OpenCV模块,本节课主要讲述 OpenCV常用的方法及使用说明。  🌈      目录 🚀一、基本操作  🚀二、绘图 🚀三、阈值处理 🚀四、几何

    2024年02月11日
    浏览(37)
  • SOC系统经典IP介绍以及使用方法说明之dw_i2c

    第三章 DW_i2c功能及使用流程介绍 文章目录 前言 一、功能介绍 1.1 i2c写操作: 1.1.1 详细flow介绍 1.2 i2c读操作: 1.2.1 详细flow介绍 二、软件流程介绍 2.1 定义WDT中断服务子程序 2.2 定义main函数 三、总结      按照i2c的协议,i2c的时钟由master方提供,master可以向slave发送数据,也

    2024年02月03日
    浏览(43)
  • lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(3)

    我们已经介绍了radash的相关信息和部分Array相关方法,详情可前往主页查看; 本篇我们继续介绍radash中Array的相关方法; 下期我们将介绍解析radash中剩余的 Array相关方法,并整理出Array方法使用目录,包括 文章说明 和 脑图说明 。 使用说明 参数:迭代次数、每次迭代调用的

    2024年04月12日
    浏览(41)
  • lodash已死?radash最全使用介绍(附源码说明)—— Array方法篇(4)

    tips:点赞 + 收藏 = 学会! 我们已经介绍了 radash 的相关信息和部分Array相关方法,详情可前往主页查看。 本篇我们继续介绍radash中Array的相关方法的剩余方法。 本期文章发布后,作者也会同步整理出Array方法的使用目录,包括 文章说明 和 脑图说明 。 因为方法较多,后续将

    2024年04月24日
    浏览(40)
  • 关于阿里云的API接口调用使用说明以及使用艾格瑞特API接口获取验证码的方法

    需要在API网关控制台创建APP,然后将API授权给APP即可。 使用详情页给的请求示例!!!(替换示例中的AppCode)就可以了 本发明涉及互联网技术领域,具体涉及一种API自动管理和SDK、文档自动生成方法。 背景技术: 伴随着互联网时代的多元化发展,更多技术人员将精力投入

    2023年04月18日
    浏览(43)
  • Java中日期时间格式化方法SimpleDateFormat和DateTimeFormatter使用完整示例及区别说明

    示例代码: 示例截图:  这里完整的用两种方法分别实现了日期和String的来回转换,鉴于SimpleDateFormat早已过时,且非线程安全,所以推荐大家首选使用DateTimeFormatter,用法基本都是差不多的。变化不大。但是DateTimeFormatter需要Java Level 8(8 - Lambdas, type annotations etc.),需留意。

    2023年04月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包