当前位置:网站首页>[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目
2022-08-09 10:00:00 【丶布布】
- 博客主页:https://blog.csdn.net/weixin_43197380
- 欢迎点赞 收藏 留言 如有错误敬请指正!
- 本文由 Loewen丶原创,首发于 CSDN,转载注明出处
- 现在的付出,都会是一种沉淀,只为让你成为更好的人
前言
配置的解决方案主要由三个项目组成:
- “VisionLibrary”为基于halcon函数库,主要封装的是一些检测函数;
- “VisionUILibrary”为QT界面库,通过该库来调用VisionLibrary函数库,从而在QT界面实现一些检测算法的实现;
- ”VisionTestFrame”为上位机测试项目,通过其调用前两者,来最终实现视觉项目功能的测试;
开发环境
- Qt5.12.0
- Halcon 13(64-bit)
- Visual Studio 2015
函数库“VisionLibrary”的新建与配置
函数库的创建:VisionLibrary(项目名)——MI_VisionLibrary(类名)——MS_VisionLibrary.h(xxx_global.h文件——预处理器块头文件名)
Debug平台下函数库的配置:右键-》属性
常规—目标文件名:$(ProjectName)D
常规—目标文件扩展名:.dll
常规—配置类型:动态库(.dll)
调试—环境:
PATH=$ (QTDIR)\bin%3b$(PATH)
(取消空格)
目的:自动配置电脑环境中QT和PATH下的所有路径。其中%3b是分号“;”的16进制编码。C++ — 常规 — 附加包含目录:
.\GeneratedFiles$(ConfigurationName)
.\GeneratedFiles
.
$(ProjectDir)include
$(QTDIR)\include
$(QTDIR)\include\QtCore
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtANGLE
$(QTDIR)\include\QtSql
$(QTDIR)\include\QtWidgets
$(HALCONROOT)\include\halconcpp
$(HALCONROOT)\include
注:VS中的一些路径宏的含义:
1- $ (QTDIR):配置环境变量中的QT路径,我的电脑环境变量配置如图
$(QTDIR)\include代表:C:\Qt\Qt5.12.0\5.12.0\msvc2015_64\include
$(QTDIR)\lib代表:C:\Qt\Qt5.12.0\5.12.0\msvc2015_64\lib
2- $(HALCONROOT):直接找到环境变量中的Halcon路径
$(HALCONROOT)\include\halconcpp代表:D:\SoftWare\Halcon13\include\halconcpp
3- $(ProjectDir):代表项目路径
4- $(SolutionDir):代表解决方案路径
注:项目路径在解决方案的下一级C++ — 预处理器 — 预处理器定义:预处理器在将 C 和 C++文件传递给编译器之前,对这些文件执行初步操作。可以使用预处理器①有条件地编译代码(宏定义,关键还是代码里有#ifdef XXX, #ifndef XXX之类的语句,这样编译的时候才起作用)、插入文件、②指定编译时错误消息,以及将特定于计算机的规则应用于代码部分。
QT_QML_DEBUG
UNICODE
_UNICODE
WIN32
_ENABLE_EXTENDED_ALIGNED_STORAGE
WIN64
QT_CORE_LIB
QT_GUI_LIB
QT_SQL_LIB
QT_WIDGETS_LIB
VISIONLIBRARY_LIB
预处理器定义的相关了解:
1、VS2010中属性页中,C/C++ -->预处理器定义(针对上面①情况)
2、vs各种报错,需要添加预处理器定义的情况汇总(针对上面②情况)链接器—常规—输出文件 :
$(OutDir)$(ProjectName)D.dll
链接器—常规—附加库目录$(QTDIR)\lib
$(HALCONROOT)\lib\x64-win64链接器—输入—附加依赖项
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Sqld.lib
Qt5Widgetsd.lib
halconcpp.lib生成事件—后期生成事件:我们用VS开发的时候,如果是项目中引用的DLL,会自动复制到生成目录,但是对于一些非引用的文件,我们又希望编译之后一起复制到指定目录,怎么办呢?那就是需要用到后期生成事件,将编译后的文件和dll拷贝到一个集中的地方,这个对于多项目开发来讲很有帮助。
1.如果复制路径的目标文件夹不存在(rd /S /Q),需新建文件夹(md)。
注意:如果创建的路径中带有空格或特殊字符,要将这个路径用引号包裹起来
我的文件夹路径存在空格,所以需要路径加上“”
2.将编译后的文件和dll拷贝到一个集中的地方
命令行输入如下:
rd /S /Q "$(SolutionDir)Export\vision\include"
md "$(SolutionDir)Export\vision\include"
rd /S /Q "$(SolutionDir)Export\vision\lib"
md "$(SolutionDir)Export\vision\lib"
rd /S /Q "$(SolutionDir)Export\vision\bin"
md "$(SolutionDir)Export\vision\bin"
xcopy /Y /S "$(ProjectDir)include\*" "$(SolutionDir)Export\vision\include\"
xcopy /Y /S "$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)D.lib" "$(SolutionDir)Export\vision\lib\"
xcopy /Y /S "$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)D.dll" "$(SolutionDir)Export\vision\bin\"
界面库“VisionUILibrary”的添加与配置
- 界面库的添加:重复函数库的步骤
右键解决方案——添加新项目——VisionUILibrary(项目名)——MI_VisionUILibrary(类名)——MS_VisionUILibrary.h(即visionuilibrary_global.h文件——预处理器块头文件名) - 添加ui界面:右键项目——添加——Add Qt Class(基类QWidget)
- 项目常规配置同上函数库“VisionLibrary”。
- 项目调试—环境配置同上函数库“VisionLibrary”。
- 项目C++ — 常规 — 附加包含目录相比配置函数库“VisionLibrary”而言,增加了对函数库的包含路径(后两项)。
.\GeneratedFiles$(ConfigurationName)
.\GeneratedFiles
.
$(ProjectDir)include
$(QTDIR)\include
$(QTDIR)\include\QtCore
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtANGLE
$(QTDIR)\include\QtSql
$(QTDIR)\include\QtWidgets
$(HALCONROOT)\include
$(HALCONROOT)\include\halconcpp
$(SolutionDir)VisionLibrary
$(SolutionDir)Export\vision\include - C++ — 预处理器 — 预处理器定义:配置同上函数库“VisionLibrary”。
- 链接器—常规—输出文件:
$(OutDir)$(ProjectName)D.dll
链接器—常规—附加库目录:相比配置函数库“VisionLibrary”而言,增加了对函数库的库目录配置(最后一项)$(QTDIR)\lib
$(HALCONROOT)\lib\x64-win64
$(SolutionDir)Export\vision\lib - 链接器—常规—输入:相比配置函数库“VisionLibrary”而言,增加了对函数库的.lib配置(最后一项)
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Sqld.lib
Qt5Widgetsd.lib
halconcpp.lib
VisionLibraryD.lib - 生成事件—后期生成事件:和配置“VisionLibrary”库一样,只是文件夹名称不一样,最后输出:
命令行输入如下:
rd /S /Q "$(SolutionDir)Export\visionUi\include"
md "$(SolutionDir)Export\visionUi\include"
rd /S /Q "$(SolutionDir)Export\visionUi\lib"
md "$(SolutionDir)Export\visionUi\lib"
rd /S /Q "$(SolutionDir)Export\visionUi\bin"
md "$(SolutionDir)Export\visionUi\bin"
xcopy /Y /S "$(ProjectDir)include\*" "$(SolutionDir)Export\visionUi\include\"
xcopy /Y /S "$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)D.lib" "$(SolutionDir)Export\visionUi\lib\"
xcopy /Y /S "$(SolutionDir)$(Platform)\$(Configuration)\$(ProjectName)D.dll" "$(SolutionDir)Export\visionUi\bin\"
上位机测试项目“VisionTestFrame”的添加与配置
- 项目的添加:右键解决方案——添加新项目——VisionTestFrame(项目名)——VisionTestFrame(类名)——QMainWindow(基类)
- 常规配置如下:
- 项目调试—环境配置同上函数库“VisionLibrary”。
- 项目C++ — 常规 — 附加包含目录相比配置函数库“VisionLibrary”而言,增加了对函数库的包含路径(后两项)。
.\GeneratedFiles$(ConfigurationName)
.\GeneratedFiles
.
$(QTDIR)\include
$(QTDIR)\include\QtCore
$(QTDIR)\include\QtGui
$(QTDIR)\include\QtANGLE
$(QTDIR)\include\QtWidgets
$(HALCONROOT)\include\halconcpp
$(HALCONROOT)\include
$(SolutionDir)VisionLibrary
$(SolutionDir)VIsionUILibrary
$(SolutionDir)Export\vision\include
$(SolutionDir)Export\visionUi\include - C++ — 预处理器 — 预处理器定义:
QT_QML_DEBUG
QT_CORE_LIB
QT_GUI_LIB
QT_WIDGETS_LIB
UNICODE
_UNICODE
WIN32
_ENABLE_EXTENDED_ALIGNED_STORAGE
WIN64 - 链接器—常规—附加库目录
$(QTDIR)\lib
$(HALCONROOT)\lib\x64-win64
$(SolutionDir)Export\vision\lib
$(SolutionDir)Export\visionUi\lib - 链接器—输入—附加依赖项
qtmaind.lib
Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib
halconcpp.lib
VisionLibraryD.lib
VisionUILibraryD.lib
总结
至此,Debug平台下函数库、界面库和测试项的添加与配置已经完成,三者的依赖关系和生成顺序如下:
将测试项“VisionTestFrame”设为启动项目
配置中遇到的问题
- 配置结束后,编译界面库VisionUILibrary是出现VisionLibrary.cpp(4): warning C4273: “VisionLibrary::VisionLibrary”: dll 链接不一致的问题
解决:因为我复制的别的项目导出库头文件是这样的
而我的项目导出库头文件是下面这样的
所以需要在界面库VisionUILibrary项目中C++ — 预处理器 — 预处理器定义将VISIONLIBRARY_EXPORTS
更改为VISIONUILIBRARY_LIB
,前面已经更改,大家按照前面的配置是对的,只是我自己刚开始不太理解预处理器定义,完全照搬的别的项目,导致出现问题。
Release平台配置与Debug平台配置的一些差别
以VisionLibrary函数库的配置为例,界面库和上位机项目配置大同小异
- 常规
- 预处理器定义
- 链接器—常规
- 命令行
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。 |
边栏推荐
- 条件控制语句
- 8.Properties property collection
- 喜迎排名18
- Dream Notes 0809
- A Practical Guide to Building OWL Ontologies using Protege4 and CO-ODE Tools - Version 1.3 (7.4 Annotation Properties - Annotation Properties)
- Tigase插件编写——注册用户批量查询
- 图表示学习(Graph Representation Learning)笔记
- LeetCode147:对链表进行插入排序 画图分析 思路清晰!
- Tom Morgan | Twenty-One Rules of Life
- 2.Collection interface
猜你喜欢
文件操作
[Personal study summary] CRC verification principle and implementation
搭建Tigase进行二次开发
mac 上安装Redis和配置
【ASM】字节码操作 MethodVisitor 案例实战 生成对象
多线程(基础)
Win系统 - 罗技 G604 鼠标蓝灯闪烁、失灵解决方案
Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
latex中复杂公式换行等号对齐
3D printed this DuPont cable management artifact, and the desktop is no longer messy
随机推荐
MySQL索引、视图、设计三范式,通俗易懂,不可错过!
常用命令之思科常用基础配置
梦笔记0809
公里周日
超详细的MySQL基本操作
Go-接口的那些事
3. Coding method
多线程案例——定时器
通过程序发送 Gmail 邮件
MySQL常用存储引擎,你不可错过的知识点!
免费下载天地图全国基础地理信息矢量数据的一种方法
Battery modeling, analysis and optimization (Matlab code implementation)
Ontology development diary 04 - to try to understand some aspects of protege
BlockingQueue理论普
7.Collections工具类
vgg网络结构
如何快速打通镜像发布流程?
2.Collection接口
《刷题日记》2
时间复杂度和空间复杂度