Qt学习笔记(19)——工程插件

前言

这个星期,主要的工作内容在一个较为大型的工程上面加上我写的插件。同时,将其运行起来,下面,我将写一下整个流程。

工程插件的创建

步骤

  1. 根据厂家给的第三方库,我们要调用它的库才能写出对应他们板子的插件。这个第三方库主要包含三大部分的内容。.h,.dll,.lib文件。有可能还有其他的一些支持文件,比如https://blog.csdn.net/weixin_38809485/article/details/107162637里面的这个2020年8月5日(无法加载插件(dll文件)的问题)这个东西。
  2. 首先,根据第三方库中的.h文件,我们应该写一个类用来调用第三方库中所给我们的功能,这里一般使用的是隐式调用,具体参考这篇博客用qt调用第三方库。然后,在插件中进行调用。注意,在这个类中要引用第三方库的.h文件,引用方法为在pro文件中加入:DEPENDPATH += $$PWD/../../AppX64 #依赖路径,dependPath最好是给相对路径,绝对路径应该也可以,没尝试过。
  3. 在插件中,我们对插件要实现的功能进行编写。包括初始化设备,启动设备,读写设备等等。这里应该注意,如果你之前已经有一个较大的文件,那么有可能里面有关于写这种插件的接口,你直接继承这个接口,按照里面要求写的功能进行编写就可以了。
  4. 你还应该加载lib文件,加载就参考这个也可以QT用法–添加外部库文件(lib文件)
  5. 对插件进行编译,就可以生成我们自己的dll文件了,注意,应设置好dll文件生成的位置。
  6. 插件编写结束后,我们就应该在调用函数中,对插件进行加载了,取得该插件的根的部分,将该插件加入插件集合之中。将该插件转成成为接口对象。
  7. 在主函数中就可以调用该接口对象实现一些功能了。

对插件的pro文件进行讲解

先贴一下代码,然后一行一行的解释整个pro文件。突然发现这个博客讲的会比我更清楚,你可以先看一下这个Qt开发中如何正确的编写.pro文件及详细说明

QT       += core network xml
TARGET    = DriverBoardNKDIO #这个配置项用来指定最后生成的目标应用程序的名称
TEMPLATE  = lib # 建立一个库的makefile。#因为我们是要生成库文件,所以选择这个lib
CONFIG   += plugin #plugin表示是一个插件,而app表示是一个应用程序
CONFIG   += c++11

include(DriveBoardNKDIO.pri)#这个include,可以把一些文件包含到工程里面,并放在恰当的位置
include(../../../config/common_x64.pri)
include(../DriverBoardAbstract/DriverBoardAbstract.pri)

OUTPUT_TARGET_INFO=$$join(TARGET,,,"  PROJECT_ROOT==>"$$PROJECT_ROOT)#工程信息的详细说明
message($$OUTPUT_TARGET_INFO)


#这个路径链接时使用,当作链接路径使用
DESTDIR      = $$PROJECT_BINDIR/BoardPlugin  #目标文件生成路径,PROJECT_BINDIR=$$PWD/../../AppX64

INCLUDEPATH += ./include # 将所要依赖的文件或库放在INCLUDEPATH之中,程序会自动搜寻
INCLUDEPATH += ./lib     #将.h文件的路径加入该includePath之中
#INCLUDEPATH +="E:/Qt_Plugin/Day1_83/Day1_83_3/deviceDemo-20200731/program/devices/board_plugin/DriveBoardNKDIOx64/lib";
INCLUDEPATH += ../DriverBoardAbstract/include
INCLUDEPATH += $$PROJECT_ROOT/devices/on_driverCall/include

DEPENDPATH  += $$PROJECT_BINDIR              #依赖路径,这里大写的,看不懂的,其实就是一个路径只是重命名了。
LIBS        += -L$$PROJECT_LIBDIR_BOARD# 这是依赖的库文件的路径
LIBS        += -lNKDIOx64# 这里是依赖的库文件的名称

#LIBS +=-L E:/Qt_Plugin/Day1_83/Day1_83_3/deviceDemo-20200731/AppX64 -l NKDIO
#LIBS +=-L $$PWD/../../../../NKDIO_SDK -l NKDIO

``
#win32: LIBS += -L$$PWD/../../../../NKDIO_SDK/ -lNKDIOx64

INCLUDEPATH += $$PWD/../../../../NKDIO_SDK
DEPENDPATH += $$PWD/../../../../NKDIO_SDK

contains(QT_ARCH,x86_64){
}
CONFIG(debug, debug|release){#把程序的编译状态debug和release分开。
    TARGET = $$join(TARGET,,,_d)
}

这是自己的理解,若有偏差,请多指教。

你可能感兴趣的:(QT,Qt)