本文首发于个人博客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. 玩转u8g2 OLED库,一篇就够(分篇)

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  2. Helm神器,让管理Kubernetes像yum安装包一样简单

    目录 一.什么是Helm 二.安装 1.安装helm客户端 2.安装Tiller 3.创建服务端 4.给Tiller授权 5.为 Tiller 设置帐号 6.验证Tiller是否安装成功 三.Helm ...

  3. 23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」

    前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...

  4. mysql 主从同步(转)

    教程开始:一.安装MySQL 说明:在两台MySQL服务器192.168.21.169和192.168.21.168上分别进行如下操作,安装MySQL 5.5.22  二.配置MySQL主服务器(19 ...

  5. Fine-Grained(细粒度) Image – Papers, Codes and Datasets

    Table of contents Introduction Survey papers Benchmark datasets Fine-grained image recognition Fine- ...

  6. 学习笔记50_mongodb

    MongoVUE,MongoDB可视化客户端: 添加一个连接: 数据库下就是集合. 实际上是json数据的集合 Mongodb->数据库->文档集合:相当于表->文档:相当于表里面的 ...

  7. Pandas 计算工具介绍

    # 导入相关库 import numpy as np import pandas as pd 统计函数 最常见的计算工具莫过于一些统计函数了.首先构建一个包含了用户年龄与收入的 DataFrame i ...

  8. [考试反思]0822NOIP模拟测试29:延续

    想保持优秀很困难 但是想持续垫底却很简单 但是你不想垫底的话持续垫底也很容易... 分AB卷,A卷共15人. skyh,tdcp,kx155,B哥145... 我:35,倒数第一. 板子专题,爆零快乐 ...

  9. 梯度下降法及一元线性回归的python实现

    梯度下降法及一元线性回归的python实现 一.梯度下降法形象解释 设想我们处在一座山的半山腰的位置,现在我们需要找到一条最快的下山路径,请问应该怎么走?根据生活经验,我们会用一种十分贪心的策略,即在 ...

  10. Java 博客系统 Tale

    Tale Tale的英文含义为故事,我相信每个坚持写Blog的人都是有故事的:中文你叫它 塌了 也无所谓 . Tale 使用了轻量级mvc框架 Blade 开发,默认主题使用了漂亮的 pinghsu, ...