Qt+VTK 在QtCreator开发过程

在此记录一下为配置Qt+VTK的开发环境,在这几天折腾的苦,给自己提个醒儿,也给同样开始配置Qt+VTK的开发环境的兄弟姐妹提供一些参考。


1、编译VTK


https://wenku.baidu.com/view/ef13a7c94a7302768f9939ad.html

https://wenku.baidu.com/view/749528a433687e21ae45a9bb.html


我是综合参考了这两篇的编译过程,同时由于在编译完成后配置过程中发现将QVTKwidget放入qt之后 会发生报错,灵机一动,配置vtk7.0发现的问题,使用的是网上博客里分享的配置方法,把qvtkwidget的lib和dll都添加进去之后也不好使,直觉上是缺少了lib和dll,后来突然想起来在vtk6.3配置成功过,果断把网上流传的7.0版本配置的添加的lib的列表与我的6.3进行了类比,发现缺少了几个比较重要的
libvtkgl2ps-7.0.lib
vtkGUISupportQt-7.0.lib
vtkGUISupportQtSQL-7.0.lib
vtkIOParallelXML-7.0.lib
vtkRenderingContextOpenGL-7.0.lib
vtkRenderingGL2PS-7.0.lib
vtkViewsQt-7.0.lib
vtkRenderingVolumeOpenGL-7.0.lib
vtkRenderingQt-7.0.lib
vtkRenderingOpenGL-7.0.lib
vtkRenderingLIC-7.0.lib
vtkGUISupportQtOpenGL-7.0.lib
vtkGUISupportQtWebkit-7.0.lib
如果没有在自己编译的vtk中发现这些lib和dll应该是用cmake编译时没有把所有的qt选项选中,需要重新编译一次。我这次在添加之后编译就通过了。

我觉得这个非常重要,QVTKwidget的支持的lib需要在编译的时候都选上(除了两篇博客内需要勾选的选项,还需要在cmake中找到qt的所有选项,都勾上)


配置完成后,将QVTKWidget的lib和dll放到designer文件夹中。

需要注意的是:

1、qt有两个界面编辑器(qt designer和qt creator,qt creator是开发工具)对应不同的文件夹

以我自己的为例:

designer的文件夹:C:\Qt\Qt5.4.2\5.4\msvc2013_64_opengl\plugins\designer


qt creator的designer文件夹:C:\Qt\Qt5.4.2\Tools\QtCreator\bin\plugins\designer

2、我下载的是qt 64位程序,编译的也是64位的vtk,但是将qvtkwidget放到qt creator的designer文件夹后,并没有在设计界面出现vtk的控件

百思不得其解,后来忘了在哪个论坛还是博客找到了,好像是因为QtCreator的发布版本都是32位(64位的qt安装包附带的也是32位的qtcreator)的,所以放进去的Qvtkwidget必须是编译的32位的,后来重新又编译了32位的vtk 将Qvtkwidget编译的32位的lib和dll放进去,就在qtcreator设计界面里找到了vtk的控件




使用qtcreator开发qt +vtk程序

在vs中开发的方法网上有很多,基本上就是把qt的vs插件从官网下载,安装之后会在vs上出现qt的菜单,开发和配置过程和vs差不多。


我想尝试直接使用qtcreator开发,真是一条不归路,对pro文件的编写方法不熟悉让我吃了很多苦头,因为在vs开发程序成功之后,觉得应该差不多,盲目的投入了这个坑。

使用qtcreator开发第一次写了简单的helloword程序,居然就开始报错!!!

开始是cl.exe没找到,在系统环境变量里配置了vc/bin的路径之后,又发生找不到stddef.h文件的错误,找了很久也没找到解决方案,基本上都是说qt没找到我的编译器或者我的编译器的配置不对,思前想后可能是因为电脑配置的开发环境太多了,乱掉了,就下载了虚拟机程序,重新安装了win7纯净系统,只安装配置了qt 和pcl和vtk 和vs,一次编译就通过了helloworld程序,算是小小的振奋了一下自己的情绪(但是不太明白是为什么)。

然后是开始开发过程

由于我的系统安装的是64位,所以qt/vtk/pcl选择都是使用的64位编译器。

但是,这样的话麻烦非常多,简单来说,就是我用32位的qtcreator软件,编译器使用64位的,添加的lib dll 等第三方库都是64位的,导致我的配置过程非常辛苦,一直报各种错误,就算我的qvtkwidget是32位的lib和dll,也会爆出类似错误,无法解析qvtkwidget的构造函数等错误。后来没办法,我把所有需要的第三方库都改成了32位程序(包括qt的版本都换成32位),一次性就编译通过,泪奔(以后想开发64位的qt程序,可能只能在vs上,或者自己编译64位的qtcreator(在网上找不到相应的教程或者帮助,如果有哪位大神有,请您不吝赐教))。

由于我自己对qt的pro文件编写也是新手,所以基本上没有什么好分享给大家的,只是简单说说自己的心得体会:

1、空格的使用,在pro文件中 用空格或者"\"来表示分隔,所有路径中一定不要有空格,

例如LIBS += C:\VTK-7.0.0-x86\lib\vtk     RenderingAnnotation-7.0.lib语句,加入空格之后 ,qt在编译过程中会认为是两个语句例如我在红色部分加入的空格,qt会认为是两个lib ,所以经常会爆出后面的lib找不到的情况。

2、qmake的使用,我的经验是,修改完pro文件之后,一定要在工程上右键 重新qmake一下,不然也是会报错。

3、相对路径,不知道为啥我使用qt的添加库功能,添加的相对路径一直不能用,比如我在工程上右键->添加库,然后找到我自己的库路径,qt会在pro文件下部添加lib include dependpath等内容,但是我一直都编译通过不了!!不知道是不是我自己的配置没有弄好,对工具->选项内的各种设置都不熟悉。

一直百思不得其解自己的错误在哪里,后来在别人的博客里发现别人都是使用绝对路径,抱着试一试的心态,把所有的lib、includepath都改成了绝对路径,编译通过了,泪奔。

4、出现编译报错,Could not create directory "C:\Users\Administrator\Documents\Error in " Util.asciify("build-untitled-Desktop_Qt_5_8_0_MinGW_32bit-Debug")": TypeError: Property 'asciify' of object Core::Internal::UtilsJsExtension(0x4e350c8) is not a function"类似这种的

凭着自己不入流的英语水平,找了一下stackoverflow,发现一般是在构建路径的问题,可能是涉及权限的情况,所以一般在工具->选择->构建和运行->概要选项卡最下面,default build directory中,把生成路径改成下面这句:

../build-%{CurrentProject:Name}-%{CurrentKit:FileSystemName}-%{CurrentBuild:Name}

这句话是意思就是把生成路径改成你工程目录往上一级的路径中,可以在上一级文件夹找到类似名字是build-TestPCLApp-Desktop_Qt_5_6_2_MSVC2013_32bit-Release的文件夹。编译就可以了。


总结的情况就这么多了。希望能给碰到类似问题的兄弟提供一些思路。大家只要积极寻找,多多思考,问题一定会找到解决的办法和思路,共勉。



5在上位机中再次遇到 cl.exe是不被识别的外部和内部命令 但是我查看了自己的配置发现工具->选项->构建与运行->编译器,编译器是可以找到的。

Microsoft Visual C++ Compiler 12.0 (x86)


Initialation: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat x86

可以看到路径里可以找到vs的编译器,百思不得其解,后来在stackoverflow里看到个外国大哥的分享。


https://stackoverflow.com/questions/8800361/cl-is-not-recognized-as-an-internal-or-external-command

I had the same problem. Try to make a bat-file to start the Qt Creator. Add something like this to the bat-file:

call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"  
"C:\QTsdk\qtcreator\bin\qtcreator" 

Now I can compile and get:

jom 1.0.8 - empower your cores
11:10:08: The process "C:\QTsdk\qtcreator\bin\jom.exe" exited normally.
share improve this answer

抱着试一试的态度,发现用bat打开的qt 然后加载qt的project,发现编译成功了。

对比了两个路径,自我分析一下,感觉是因为qt自动探测的vs的编译器的位置 是vcvarsall.bat是系统的vc环境配置也就是64位的,这个大哥用bat打开的,是这个vs路径下 bin文件夹下的 vcvars32.bat ,使用的是32位的环境,因为自己底子不足,只能粗略的这么猜想。


你可能感兴趣的:(技术文件,总结)