open3d+vs2019+qt 导入到QT Creator使用

之前是导入vs2019中使用的,但是vs中用ui去写界面不太方便,于是想着导入QT Creator使用,遇到一些问题折腾了很久,不过最后还是解决了。


至于如何将open3d和qt结合到vs2019中之前文章有写过open3d+vs+qt结合_自闭的航宝的博客-CSDN博客a

1.vs项目导出为QT项目,扩展--Qt VS Tools Create Basic.pro File,随便起个tag后确定即可

open3d+vs2019+qt 导入到QT Creator使用_第1张图片

2.选中生成的.pro文件,进去之后会让你构建项目,选择 MSVC2017_64,原因就是我这边open3d使用的是release_x64,所以QT也使用相应的版本,可以在项目属性页Qt Project Settings看到我使用了msvc2017_64,所以需要QT也用一样的编译器构建。

​​​​​​​​​​​​​​open3d+vs2019+qt 导入到QT Creator使用_第2张图片

 

 这里遇到第一个问题,一般来说这里显示的是黄色感叹号,无法选取,这里就需要操作一下,具体操作我参考的是这个博客,很快就能解决了。Qt5.9.2初次导入使用msvc2017_64编译器遇到的问题记录_msvc2017编译器_csdndenglu的博客-CSDN博客

3.进去之后有的时候记得先编辑一下.pro文件和.pri文件,它好像没有导入open3d库,所以自己导入一下,具体导入方法也比较简单。在pro文件中先添加QT +=  core gui widgets,然后添加INCLUDEPATH和LIBS,把open3d的依赖添加上去,最后由于代码生成运行库的不同,选择自己的模式(MT,MTD,MD,MDd之类的好像是),不然编译时报错error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”.,具体看我下面的注释。

# ----------------------------------------------------
# This file is generated by the Qt Visual Studio Tools.
# ------------------------------------------------------
#第一处要添加的
QT += core gui widgets

TEMPLATE = app
TARGET = Restructure
DESTDIR = ./x64/Release
CONFIG += release
DEFINES += \"$(INHERIT)\" _WINDOWS _GLIBCXX_USE_CXX11_ABI=0 GLEW_STATIC FMT_HEADER_ONLY=1 CMAKE_INTDIR=\"Release\"
#第二处,根据自己Open3d路径添加
INCLUDEPATH += E:\source\open3d\include \
E:\source\open3d\include\open3d\3rdparty
#第三处,添加依赖的libs,这个是自动生成的,一开始有点小问题,手动改了下,参照这个格式就行
LIBS += -L"." \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_assimp_assimp-vc142-mt" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_assimp_IrrXML" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_glew" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_glfw3" \
    -lgdi32 \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_jpeg" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_jsoncpp" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_lzf" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_png" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_zlib" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_rply" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_tinyfiledialogs" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_qhullcpp" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_qhull_r" \
    -lopengl32 \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_imgui" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_filameshio" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_filament" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_filamat_lite" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_filaflat" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_filabridge" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_geometry" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_backend" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_bluegl" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_ibl" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_image" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_meshoptimizer" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_smol-v" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_utils" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_filament_bluevk" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_tbb_tbb_static" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_tbb_tbbmalloc_static" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_mkl_mkl_intel_ilp64" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_mkl_mkl_core" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_mkl_mkl_sequential" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_mkl_mkl_tbb_thread" \
    -l"C:/Program Files (x86)/Open3D/lib/Open3D_3rdparty_mkl_tbb_static" \
    -lkernel32 \
    -luser32 \
    -lwinspool \
    -lshell32 \
    -lole32 \
    -loleaut32 \
    -luuid \
    -lcomdlg32 \
    -ladvapi32
DEPENDPATH += .

#这是最后一处,需要添加的,我这边需要的是MT,根据不同填不同值应该是
    CONFIG(debug, debug|release) {
        QMAKE_CXXFLAGS_DEBUG += /MTd
    }

    CONFIG(release, debug|release) {
        QMAKE_CXXFLAGS_RELEASE += /MT
    }
#其他的都是自动生成的,不用管
MOC_DIR += GeneratedFiles/$(ConfigurationName)
OBJECTS_DIR += release
UI_DIR += GeneratedFiles
RCC_DIR += GeneratedFiles
include(Restructure.pri)

4.然后就遇到第二个坑,要重新清除再重新构建才会让MT生效,不然还是会报link2038的错误,在这浪费了1个多小时。

open3d+vs2019+qt 导入到QT Creator使用_第3张图片

 项目右键,清除-重新构建

5.还记得遇到了一个问题报错如下QT Can not open *.obj.*.*.jom for write,这里我取消使用Jom代替nmake解决了,项目-》manage kits-》取消使用jom代替nmake

open3d+vs2019+qt 导入到QT Creator使用_第4张图片

 6.测试构建运行,用的代码就是开头我自己的文章中的代码,成功显示小球,配置完毕

open3d+vs2019+qt 导入到QT Creator使用_第5张图片

 7.如果显示You are running qmake on a generated .pro file.This may not work!,可以在pri文件中将它注释掉。

open3d+vs2019+qt 导入到QT Creator使用_第6张图片

你可能感兴趣的:(学习笔记,qt,c++,windows,visual,studio)