本文首发于个人博客https://kezunlin.me/post/cf628dd8/,欢迎阅读!

guide to build qt library and use in another project

Guide

build qt library

QObject class

class  SHARED_EXPORT CameraGrabber : public QObject
{
Q_OBJECT
signals :
void sendFrameTrash(int nCameraID, int nTotalTrashFrame);
public:
explicit CameraGrabber(QObject *parent = 0);
}

CMakeLists.txt

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON) # for qt SLOTS add_library(${CAMERA_GRABBER_TARGET}
CaptureProcess.h
CaptureProcess.cpp
FindGrabber.h
FindGrabber.cpp
CameraGrabber.h
CameraGrabber.cpp
) qt5_use_modules(${CAMERA_GRABBER_TARGET} Core) target_link_libraries (${CAMERA_GRABBER_TARGET}
${CONGIF_TARGET}
${SAPERA_LIBRARIES}
)

build and get CameraGrabber.h,CameraGrabber.lib,CameraGrabber.dll and mocs_compilation.cpp.

use qt library in MainWindow

MainWindow.h

#include "Sensor/CameraGrabber/CameraGrabber.h" 

class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent=0);
~MainWindow(); private:
CameraGrabber *graber = nullptr;
}

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h" // moc cpp files for QObject
#include "build/src/car/Sensor/CameraGrabber/MySensorCameraGrabber_autogen/mocs_compilation.cpp"

CMakeLists.txt

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON) # for qt project #==============================================================
# cpp,ui,resource files
#==============================================================
# cpp files
#aux_source_directory(. SRC_LIST)
set(SRC_LIST
main.cpp
mainwindow.h
mainwindow.cpp
) # ui files
qt5_wrap_ui(ui_FILES mainwindow.ui) # resource files
qt5_add_resources(qrc_FILES resource.qrc) message( [Main] ${SRC_LIST} )
message( [Main] ${ui_FILES} )
message( [Main] ${qrc_FILES} ) #==============================================================
# generate and link target for point_cloud_viewer
#==============================================================
set(TARGET_NAME aa_qt_main)
add_executable(${TARGET_NAME} ${SRC_LIST} ${ui_FILES} ${qrc_FILES}) # link qt libraries
qt5_use_modules(${TARGET_NAME} Core Widgets OpenGL Xml Gui Sql) # link vtk and pcl libraries
target_link_libraries(${TARGET_NAME}
${CONFIG_TARGET}
${UTIL_TARGET}
${MODEL_TARGET}
${DETECTION_TARGET}
${DATABASE_TARGET} # sensor
${CODER_LINKER_TARGET}
${RFID_TARGET}
${CAMERA_GRABBER_TARGET}
${LIDAR_GRABBER_TARGET} ${GTEST_LIBRARIES}
${BOOST_THREAD_LIBRARY}
${GLOG_LIBRARIES} ${Boost_LIBRARIES}
${OpenCV_LIBS}
${PCL_LIBRARIES}
)

tips

If we reference qt dll which use QObject,when we include header in MainWindow.h,we must also include mocs_compilation.cpp in MainWindow.cpp. Otherwise error will occur:

error LNK2001: 无法解析的外部符号 "public: static struct QMetaObject const staticMetaObject

Reference

History

  • 20180409: created.

Copyright

如何编译和使用自定义Qt动态链接库 | how to build and use user-defined qt library的更多相关文章

  1. nginx-1.12.0版本(编译安装)-自定义安装路径

    nginx-1.12.0版本(编译安装)-自定义安装路径 安装路径:/application/nginx-1.12.0 1.前期准备 安装编译需要的gcc和gcc-c++ yum install -y ...

  2. Qt Dll总结(二)——创建及使用Qt的Dll(转载)

    先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数 ...

  3. Qt DLL总结【二】-创建及调用QT的 DLL(三篇)good

    目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...

  4. Qt DLL总结【二】-创建及调用QT的 DLL

    开发环境:VS2008+Qt4.7.4 最近看了不少Qt的DLL例子,总结一下如何创建和调用QT 动态链接库. 先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数 ...

  5. [Qt Creator 快速入门] 第0篇 开始学习Qt 与Qt Creator

    Qt官方信息 Qt官网:http://qt.digia.com/ Qt开源官网:http://qt-project.org/ Qt最新版本下载:http://qt-project.org/downlo ...

  6. Qt 学习之路 2(24):Qt 绘制系统简介

    Qt 学习之路 2(24):Qt 绘制系统简介 豆子 2012年10月30日 Qt 学习之路 2 77条评论 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于Q ...

  7. Qt 学习之路 2(2):Qt 简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(2):Qt 简介 Qt 学习之路 2(2):Qt 简介  豆子  2012年8月21日  Qt 学习之路 2  43条评论 Qt 是一个著名的 ...

  8. Qt开发北斗定位系统融合百度地图API及Qt程序打包发布

    Qt开发北斗定位系统融合百度地图API及Qt程序打包发布 1.上位机介绍 最近有个接了一个小型项目,内容很简单,就是解析北斗GPS的串口数据然后输出经纬度,但接过来觉得太简单,就发挥了主观能动性,增加 ...

  9. Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)

    下载地址:http://download.qt.io/ 当进入解压好的源码包后,使用./configure –help命令,可以获得相应帮助,前面是*号的表示默认参数. +号表示该功能要求被评估,评估 ...

随机推荐

  1. HTTP协议详解(二)—— HTTP响应

    HTTP响应(Response) 响应与请求一样分成三个部分:响应行.响应头.响应体. 1.响应行: 格式 - HTTP/1.1 200 OK 2.响应头: 部分头属性解释 - Location:这个 ...

  2. 百万年薪python之路 -- 并发编程之 协程

    协程 一. 协程的引入 本节的主题是基于单线程来实现并发,即只用一个主线程(很明显可利用的cpu只有一个)情况下实现并发,为此我们需要先回顾下并发的本质:切换+保存状态 cpu正在运行一个任务,会在两 ...

  3. C++ 构造函数的执行过程(一) 无继承

      引言 C++ 构造函数的执行过程(一) 无继承 本篇介绍了在无继承情况下, C++构造函数的执行过程, 即成员变量的构建先于函数体的执行, 初始化列表的数量和顺序并不对构造函数执行顺序造成任何影响 ...

  4. Java日志Log4j或者Logback的NDC和MDC功能

    NDC和MDC的区别 Java中使用的日志的实现框架有很多种,常用的log4j和logback以及java.util.logging,而log4j是apache实现的一个开源日志组件(Wrapped ...

  5. react框架安装和使用

    react 其实react跟vue差不多, 区别:vue-  双向数据绑定, react  单向数据绑定. 中文文档:https://react.docschina.org/ 第一步:安装方式,不能直 ...

  6. "Dependency on app with no migrations: %s" % key[0]

    问题描述:我在model中建好模型类,运行的控制台就报错误: 解决方法:1,首先需要在setting中重载AUTH_USER_MODEL AUTH_USER_MODEL = 'users.UserPr ...

  7. RabbitMQ-交换机模式

    在说正题之前先解释一下交换机模式是个笼统的称呼,它不是一个单独的模式(包括了订阅模式,路由模式和主题模式),交换机模式是一个比较常用的模式,主要是为了实现数据的同步. 首先,说一下订阅模式,就和字面上 ...

  8. CSPS模拟 73

    被T3坑了 忘记考虑$atan$只会返回正数导致无法区分方向相反模长相等的两个向量 直接把向量拆成ab两个上三角函数干出来就对了 真的exhausted

  9. 基于xposed Hook框架实现个人免签支付方案

    我的个人网站如何实现支付功能? 想必很多程序员都有过想开发一个自己的网站来获得一些额外的收入,但做这件事会遇到支付这个问题.目前个人网站是无法实现支付功能的. 今天我就给大家分享一下我的实现方案:&l ...

  10. docker基本操作教程

    镜像操作 获取镜像 从Docker Hub搜索镜像: docker search ubuntu 下载镜像: docker pull ubuntu:18.04 若下载镜像速度较慢,更改镜像源: Ubun ...