常见的错误集合解决方案(二)

常见的错误集合解决方案(一)

七、

关于在Qt中使用QVTKWidget插件问题

问题描述:将QVTKWidget插件的dll放到Qt下面,但是出现了一个现象,就是Release下面可以生成并运行,但是Debug下面死活运行不了,程序启动不了(但是可以生成成功)

问题解决:

第一:检查是否包含了VTK下面的bin文件是否在VS中配置;

第二:如果配置了还是不行,那就注意了,因为下载的PCl中的VTK并不支持Qt的可视化,就必须要自己下载VTK的源码进行CMake编译,具体的编译见链接,编译完了我们会得到支持Qt的可视化版的“进化态”的VTK;

第三:因为需要将Qt和VTK结合嘛,我们的程序可以生成表示代码没问题,但是执行的时候出现问题,表示程序启动然后在链接动态库的过程中出现了问题,所以找到原来的VTK目录下的bin目录中的一个叫vtkGUISupportQt-8.1.dll的文件,将我们CMake编译的VTK中的Debug下的该文件复制覆盖原来的这个即可,然后就可以执行得到界面了

后续问题:这里出现了另外的一个问题,就是加入了DLL插件后,有时候在VS中打开UI文件时,出现无法打开的问题,这里暂时的解决是先把DLL插件从文件目录下移除,就可以打开了,但是这时点击去打开的UI是没有QVTK的窗口的,这是一个不好的问题。但是把release下的dll放在Qt下面又是可以打开UI界面的,但是放Debug的dll到Qt下面就会出现问题,目前不知道为啥会出现这个

八、关于无法打开ui_mainwindow.h、moc_xxxx.cpp和qrc_xxxx.cpp的解决方案

问题描述:在打开别人的工程或者打开网上下载的工程的时候会出现无法打开moc_xxxx.cpp和qrc_xxxx.cpp文件?

问题解决:首先确定下这两个文件都是什么文件,一般来讲这些文件都是在VS下的Qt编程的时候出得到的生成文件,一般都是在Generated Files中,如下:

但是在有些时候这几个文件是无法打开的,下面一个个文件来说明下怎么解决:

① ui_xxx.cpp无法打开:这个文件是和UI界面联系的h文件,右键重新编译UI即可

② moc_xxxx.cpp无法打开:点击和这个cpp文件相对应的.h文件,然后右键编译即可得到

③ qrc_xxxx.cpp无法打开:这个文件是和资源文件相关联的cpp文件,找到对应的资源文件,然后右键编译即可得到

九、VTKBug——VTK8.1运行时出错:0xC0000005: 读取位置 0x00000000 时发生访问冲突

问题描述:

遇见这种问题一般都是空指针,即:指针里没有赋值。如果你对null 进行操作就会产生空指针异常

根据VTK官方解释:VTK/VTK 6 Migration/Factories now require defines。英文不喜欢看,可以看一下中文的:VTK/VTK6 迁移/“工厂化”需要的定义。

可以从中发现之前的代码由于是VTK5.10.1版本写的,可以正常运行,但是在VTK6之后的版本,VTK采用了工厂模式,而工厂模式需要“自动初始化”,具体取决于在VTK配置时启用哪些模块。如果您启用所有模块,并在不使用CMake的情况下构建项目,则需要在项目中进行一些定义,以使工厂正常工作。

9月10号, 2013,有一个新的宏添加进来,可以让这个过程更加简单。

解决方法

在源文件头部添加代码:

#include "vtkAutoInit.h"

VTK_MODULE_INIT(vtkRenderingOpenGL);

VTK_MODULE_INIT(vtkInteractionStyle);

十、Qt中建立了QVTKWidget插件后,鼠标点击就会崩溃

问题描述:在Qt的UI中拖了一个QVTKWidget的插件,但是在启动启程后出现鼠标点击该控件窗口就会导致程序崩溃

问题分析:1、因为用到了VTK的可视化功能,必须在程序的中有该部分的初始化

2、因为下载PCL1.8.1中的VTK并不支持Qt,所以需要重新编译VTK,然后编译的VTK是否和原来的VTK发生的冲突呢?

问题解决:

1、关于初始化部分:

需要初始化关于VTK插件,也就是起码的包含相关的头文件、include相关的.h的路径,基本的如下:

#include <vtkAutoInit.h>

#include <vtkRenderer.h>

#include <vtkOpenGLActor.h>

#include <vtkOpenGL.h>

#include <vtkWidgetEvent.h>

#include <vtkWidgetSet.h>

#include <vtkPlaneSource.h>

#include <vtkPolyData.h>

#include <vtkSmartPointer.h>

#include <vtkPolyDataMapper.h>

#include <vtkActor.h>

#include <vtkRenderWindow.h>

#include <vtkRenderWindowInteractor.h>

#include "QVTKWidget.h"

以及对应的模块初始化:

VTK_MODULE_INIT(vtkRenderingOpenGL);

VTK_MODULE_INIT(vtkInteractionStyle);

VTK_MODULE_INIT(vtkRenderingFreeType);

关于这里的模块初始化可以看下前面的第十条

然后还有include路径:

2、关于PCL中原版本的VTK和编译的新的VTK的包含问题

关于这个包含的bin文件到底是该包含那个呢,如果包含错了就会出现问题的

提供下这里的解决方案:

把编译VTK里面的bin文件夹下的dll文件全部覆盖掉原来的VTK的dll(覆盖之前先把原来的文件夹copy份)

编译的dll

这里覆盖后即可了,

其实这里有种方法是不覆盖也可以的,dll文件是程序执行过程中需要链接的动态库,

第一,我们可以在环境变量中去添加编译的VTK的bin文件路径(应该要删掉原来的VTK路径,没试过,记得添加后重启电脑)

第二,我们可以在上面的附加包含目录中去把编译的VTK的bin文件路径也包含进去(要不要都包含,还是只包含一个即可,没试过)

下面的是测试下这两个bin文件的包含问题:

① 测试在附加包含目录下面包含两个bin文件,启动程序,鼠标点击VTK控件,报错:

鼠标的响应消息崩了

原因分析:因为在系统环境变量中并没有新编译的VTK的bin路径,导致启动后去链接的时候并没有链接到dll,结果就报错了(因为配置环境变量需要重启电脑,并没有试过,猜测是这样的)

② 只包含新编译的bin文件路径

报错,报错位置和上面一样

③ 都不包含,全靠环境变量去链接

报错,报错位置和上面一样

④ 添加新编译的VTK的bin文件路径到环境变量中去,但是呢,不删掉原来的VTK的bin路径

报错,报错位置和上面一样,估计还是需要讲原来的VTK的bin文件路径删掉才可以的

⑤ 添加新编译的VTK的bin文件路径到环境变量中去,删掉原来的VTK的bin路径

测试ok,包含的原来的VTK的lib文件也可以删掉(不删掉好像也是可以的)

总结:第一,需要新编译的VTK的bin文件里面的dll来作为支撑,第二,需要在环境变量中去配置好bin的路径

十一、加入QVTK插件后无法在release模式下打开程序

问题描述:在Qt中加入QVTKWidget插件后,debug模式下可以正常的运行,但是在Release模式下无法启动运行,如图:

问题分析:应该是在Release模式下包含了debug的库,或是应该包含支持Release模式下的dll,但是没有包含

第一:先看看Release模式下的exe的需要的dll有哪些

主要是看下第三方库的情况,也就是PCL、VTK的库,在配置中没看出来什么问题,跟踪到问题还是出在了QVTKWidget上,因为用到了可视化工具,还是出在了这个插件上了,如图:

方案1:解决的办法是在环境变量中添加了Release的bin路径,而且路径是放在了Debug的bin路径前面,但是这样添加后就会导致Debug模式下无法运行了

方案2:添加环境变量,Release放在Debug后面,但是这样,就还是导致在VS里面是无法打开Release模式的,所以就得找到Release模式下生成的EXE需要支持的DLL文件了,然后将这些dll文件全部放在exe同目录下面即可运行了

总结:推荐采用方案2,这样都可以运行,

PS:其实还有种方案可以尝试下,包含的lib文件是分debug和release的,可以将两者单独分开来放在两个不同的文件夹下,然后在debug下包含debug模式的,在release下包含release模式的;同理包含的bin文件也是分为debug和release的,一样的方式分两个文件夹分别包含。但是这里有一点需要考量的就是系统环境变量中设置的是debug模式在release模式的前面,不知道这样的设置会不会有影响(因为系统变量会先起到链接作用,即使在VS下面去分别包含了)

十二、Qt的.ui文件在VS中无法生成ui_xx.h文件的解决办法

问题描述:在用到别人的工程的时候,有时候可能会出现无法生成ui_xx.h文件,.UI文件有,但是没有.h文件,

问题解决:首先尝试”第八条“解决方式,如果还是无法得到ui_xx.h,那么就参照如下的:

看看工程中的ui文件的属性,如下:

最开始的“项类型”是不参与生成的,那么不参与生成肯定就不会有.h文件了,改为“自定义生成工具”

如下:

需要在上面的几个参数项中填一些东西:

命令行:

setlocal

D:\Qt5.6.3\5.6.3\msvc2015_64\bin\uic.exe  -o  "F:\360MoveData\Users\znlangel\Desktop\CloudViewer-master\src/ui_xxx.h"  "F:\360MoveData\Users\znlangel\Desktop\CloudViewer-master\src\xxx.ui"

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

其中上面的Qt路径ui_xxx.h路径根据自己的来

说明:Generating ui_XXXX.h

输出:F:\360MoveData\Users\znlangel\Desktop\CloudViewer-master\src\ui_xxx.ui

附加依赖项:F:\360MoveData\Users\znlangel\Desktop\CloudViewer-master\src\xxx.ui

然后应用---》右键ui文件编译即可

十三、出现lnk2019,无法解析外部符号qt_metacast或qt_metacall

问题分析:出现这样的问题,像其他的我们还可以去找下无法解析的函数在哪里,然后逐步的去解决(一般就是没有链接到DLL或是lib文件了),但是在这里的QT中出现的这个问题,首先你都定位不到这个类的函数在哪里,出现这个问题一般就是Qt里面的moc_XXX.cpp出现了问题,如下:

这两个文件是跟着UI文件一起生成的,一般就是在Generated Files文件夹下,然后当我们使用别人的工程时候,第一,可能会丢失这些moc_XXX.cpp或qrc_XXX.cpp文件,具体的找回来方案见“方案8”;第二,我们打开工程,在Generated Files可以看到这些文件,而且还可以双击打开文件,但是我们还会报错呢,注意了,这个时候看看文件前面有没有一个红色的“-”,这个时候我们可以双击打开,但是文件是并未加载到我们工程的,解决办法就是先讲文件移除,然后重新加载进来即可了。

十四、出现kdtree无法解析的问题

问题描述:在项目中用到了八叉树的类,但是却出现了无法解析的问题,但是代码并没有标红的,而就是无法生成

十五、Qt工程报错Template classes not supported by Q_OBJECT

问题描述:明明好好的工程,但是突然打开就各种标红,

然后重新编译就报了上面的问题,这种问题主要是moc文件出现了问题,

然后重新编译就报了上面的问题,这种问题主要是moc文件出现了问题,

双击moc文件,发现无法打开,这个文件本来应该是跟着UI生成的文件,在本地的工程下也无法找到该文件,那么

重新把这个文件生成出来就可以了,具体的方法见问题八

十六、boost文件里面的错误,“不是std成员”错误

问题描述:在工程中生成时报上图错误,开始以为是PCL里面的boost库文件和C++里面的某些库文件发生了冲突,后来发现是

包含的库文件的路径发生了错误,

打个简单的比如,如下的路径是boost在PCL中的路径:

D:\PCL1.8.1\PCL1.8.1\3rdParty\Boost\include\boost-1_64\boost

然后我们如果在vs里面的配置库目录的时候一直配到了boost这里,但是我们的工程头文件中要是出现了这样一个

“#include<boost/thread.hpp>"时就会报错的,为什么,因为你包含的路径到了boost,去链接找的时候就直接在boost下面去找了

但是不会有路径boost,这样的话要么将头文件的boost去掉,要么包含到boost的上一级目录,即boost-1_64即可(推荐这种,

因为很多头文件在pcl的文件中有包含的)

十七、error MSB6006: “cmd.exe”已退出,代码为 3

错误描述如下,在编译UI文件的时候报错msb6006,首先理清楚为什么会编译ui文件失败,导致ui文件失败的最直接的原因就是moc_xx.cpp文件和ui_xx.h文件找不到导致的,还就是qrc_xx.cpp文件找不到导致的,如下的几个文件无法找到:

同时这几个文件也出现了确实无法打开的尴尬情况(双击无法打开),但是这几个文件在本地啊,为什么无法打开,右键也无法编译呢,这就涉及到Qt的版本问题以及给的编译路径的问题了,因为电脑里面装了32位的Qt和64位的Qt,这里的这个功能是需要32位的Qt来编译的,但是我给的链接编译器的是64位的Qt,所以就会出现无法编译的问题,如下:

上面D盘的Qt就是64位的,理论上之前也是可以的,但是后来把5.6.3版本的这个Qt卸载了,也找不到路径了,更是会报错的,然后将该路径改为32位的Qt版本,如下:

上面改动的说明情况介绍见“问题八和问题十二”

平台活动指南

公众号将会推送基于PCL库的点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维世界相关内容的干货分享。不仅组织技术交流群,并且组建github组群,可自由分享。交流提问。

历史文章查看点云学习历史文章大汇总

1.一起学SLAM:第三期:一起来学SLAM

2.招募乐于分享的你:点云PCL运营招募啦

3.招募计算机视觉,SLAM,三维视觉,点云等相关领域博客博主,或者公司开设专栏,只要与平台主题相关,乐于分享,都可以与本平台合作经营,发布原创文章。并且可以加入微信,QQ交流群,认识更多志同道合的一起同行分享。

4,相机测评活动:图漾双目,小觅相机,奥比中光三款相机测评活动正在进行中,,,,,,

●文字来源 | 点云PCL资源组

(0)

相关推荐

  • win10 opencv3.2 vs2017 darknet

    参考 https://jingyan.baidu.com/article/4b52d702b3209afc5c774b3c.html https://jingyan.baidu.com/article ...

  • Darknet/yolo

    准备工作: OPENCV 3.4.10 https://opencv.org/releases/ VS2017 https://visualstudio.microsoft.com/zh-hans/ ...

  • (7条消息) Qt Pro语法总结

    (7条消息) Qt Pro语法总结

  • QT5的程序打包发布(将QT5的工程项目打包成一个exe程序)

    最近,在学习QT5的过程中,想尝试着把自己写的工程程序给打包发布出来,在任何一台windows系统都能运行,这样就不会限于电脑需不需要安装QT安装包了. 首先,先介绍自己使用的环境.我使用的QT版本是 ...

  • 常见的错误集合解决方案(一)

    常见的错误集合解决方案(一) No.1 提示错误 'Microsoft.VC90.CRT,version="9.0.21022.8" 把Microsoft.NET Framewor ...

  • 初中数学学习中的最常见的错误及解决方案,看完提分!

    中考数学 助力轻松升学! 一.学习方法方面的问题 1.做几何题时候不会做辅助线 原因:对于几何模型认识不充分 解决方案:每一种基本的几何模型都有定义.性质和判定三方面,要将这三方面知识熟记于心.一般来 ...

  • 中考数学最常见的错误及解决方案

    一.学习方法方面的问题 1.做几何题时候不会做辅助线 原因:对于几何模型认识不充分 解决方案:每一种基本的几何模型都有定义.性质和判定三方面,要将这三方面知识熟记于心.一般来说应用的过程是:判定是哪种 ...

  • 中考数学解题中的最常见的错误及解决方案

    曾听到这样一则不算是笑话的笑话, 有人问,如何才能在考试中的高分呢? 把题做对就好. 那又如何把题做对呢? 把题不要做错就好. -- 估计会一直这样问下去的,虽然看似是笑话,但也包含着考试得高分的真理 ...

  • 初中数学学习中的最常见的错误及解决方案

    一.学习方法方面的问题 1.做几何题时候不会做辅助线 原因:对于几何模型认识不充分 解决方案:每一种基本的几何模型都有定义.性质和判定三方面,要将这三方面知识熟记于心.一般来说应用的过程是:判定是哪种 ...

  • 【初中数学学习中的最常见的错误及解决方案...

    【初中数学学习中的最常见的错误及解决方案...

  • 数学学习中最常见的错误及解决方案

    曾听到这样一则不算是笑话的笑话, -有人问,如何才能在考试中的高分呢?  -把题做对就好.  -那又如何把题做对呢?  -把题不要做错就好. -- 估计会一直这样问下去的,虽然看似是笑话,但也包含着考 ...

  • Mac提示app损坏、Error,Mac电脑最常见错误的解决方案

    这篇文章蓝同学给大家分享一下Mac电脑上最常见错误的解决方案. 以下仅给出部分错误提示截图,类似的错误提示还有磁盘映像损坏.xxx.app有啥啥问题.... ①提示xxx.app已损坏,让你移到废纸篓 ...

  • Power BI 总计错误的终极解决方案(二)

    关于PowerBI总计行不等于明细行的问题,之前曾写过一篇文章,专门解释了原因并提供了解决方案:PowerBI 表格总计错误的终极解决方案 但在实际应用过程中,仍然会碰到这个简单的解决方案解决不了的其 ...