📢前言
配置的解决方案主要由三个项目组成:
- “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):配置环境变量中的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):直接找到环境变量中的Halcon路径 (HALCONROOT)\include\halconcpp代表:D:\SoftWare\Halcon13\include\halconcpp
3- (ProjectDir):代表项目路径4−:代表项目路径(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
[项目配置] 配置Qt函数库和ui界面库的封装并调用的项目(二)+https://developer.aliyun.com/article/1394491